第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不同的類,列表中具有相同的超類

不同的類,列表中具有相同的超類

POPMUISE 2023-10-12 16:41:21
是否可以將具有相同超類的類放入 ArrayList 中,并且我可以檢索子類的字段?public class Animal {  private String name;   public String getName() { ... }}public class Dog extends Animal {  private String tailLength;  public String getTailLength() { ... }}public class Bird extends Animal {  private String beakSize;  public String getBeakSize() { ... }}現(xiàn)在我想將它們放入 arrayList 中private List<Animal> animals = new ArrayList<>();animals.put(new Dog());animals.put(new Bird());我能夠成功地將它們放入列表中,但是當(dāng)我從列表中檢索值時,我無法從鳥類中獲取 beakSize ,從狗類中獲取 tailLength 。您能提出一個如何做到這一點的策略嗎?謝謝!
查看完整描述

3 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗 獲得超8個贊

為什么這不起作用?

你已經(jīng)得到了 type 的列表Animal。這意味著編譯器有且只有一個保證。該對象具有與超類關(guān)聯(lián)的字段和方法Animal。自己測試一下。


Animal myBird = new Bird();


myBird.getBeakSize(); // This won't compile.

編譯器不知道它的類型,Bird因為它的引用類型是Animal。


不同的方法

您需要做的是重新考慮您的類設(shè)計,以便您的超類具有供您訪問的必要信息。


如果您需要訪問特定的子類,那么我建議保留每個子類的單獨列表,可能在對象內(nèi)部。


另一種選擇可能是這樣的:


public abstract class Animal {


  private String name; 

  public String getName() { ... }

  public abstract String getFaceDepth(); //


}


public class Bird {

  public String getFaceDepth() {

     // Return beak size here.

  }

}


現(xiàn)在,您會注意到面部深度并不是特別有用。這就是一般情況下的問題。有時,它們太籠統(tǒng)了,以至于失去了它們所代表的數(shù)據(jù)的本質(zhì)。這可能表明您需要考慮您的類結(jié)構(gòu),具體取決于您的問題。


查看完整回答
反對 回復(fù) 2023-10-12
?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗 獲得超4個贊

當(dāng)您從數(shù)組中檢索元素時,可以使用 'instanceof' 方法:


Animal animal = // get element/iterate over array

if(animal instanceof Dog) {

  Dog dog = (Dog) animal;

  // continue here...

}

if(animal instanceof Bird) {

  Bird bird = (Bird) animal;

  // continue here...

}


查看完整回答
反對 回復(fù) 2023-10-12
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊

你需要有2個接口


public interface Beak {

   String getBeakSize();

}


public interface Tail {

   String getTailSize();

}

現(xiàn)在你的代碼看起來像這樣


public class Animal {


  private String name; 

  public String getName() { ... }


}


public class Dog extends Animal implements Tail {

  private String tailLength;


  @Override

  public String getTailLength() { ... }

}


public class Bird extends Animal {

  private String beakSize;


  @Override

  public String getBeakSize() { ... }


}

您可以像以前一樣添加項目。


private List<Animal> animals = new ArrayList<>();


animals.put(new Dog());

animals.put(new Bird());

但現(xiàn)在,您可以使用界面來查找動物是否有尾巴或喙或兩者都有或什么都沒有。


for(Animal animal in animals) {

     if(animal instanceof Tail) {

          System.out.println(((Tail)animal).getTailLength());

     }

     if(animal instanceof Beak) {

          System.out.println(((Beak)animal).getBeakLength());

     }

}

為什么這很重要?這樣你就可以擁有另一種動物,比如貓或另一種也有尾巴的鳥。這件作品將與他們所有人一起工作。


查看完整回答
反對 回復(fù) 2023-10-12
  • 3 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號