[英]Call a method of specific child classes
我有以下這些接口
interface Driveable{
public void drive();
}
interface Flies{
public void isFlying();
public Integer fliesKmPerHour();
}
摘要 class
abstract class WarMachine{
...
class Vehlice extends WarMachine implements Driveable{
...
class Airoplane extends WarMachine implements Driveable,Flies{
...
我有主要的 class
public class War
public ArrayList<WarMachine> warMachineArrayList;
public War() {
warMachineArrayList = new ArrayList<>();
}
但在主要的 class 中,我有一個方法,我想返回一架 fliesKmPerHour 最高的 Airoplane
public Airoplane getMaxAiroplane(){
Airoplane airoplane = null;
//..
}
我的問題是如何通過從 warMachineArrayList 調用來訪問fliesKmPerHour
首先在這種情況下我們應該做什么我們應該 go 到fliesKmPerHour();
所在的源。 方法來自。 正如我們在這里看到的,這個方法來自Flies interface
我們在這里知道的是這個方法屬於 Airoplane class 所以在 arrayList 我們應該檢查 Flies 接口的實例和 Flies 的類型轉換元素,然后我們可以調用該方法
因此,使用if(warMachineArrayList.get(i) instanceof Flies)
{ 我們檢查arrayList
中的 Flies 實例,然后我們嘗試獲得具有最高速度的 Airoplane
if(((Flies)warMachineArrayList.get(i)).fliesKmPerHour() > speedKmh){
airoplane = (Airoplane) warMachineArrayList.get(i);
speedKmh = ((Flies)warMachineArrayList.get(i)).fliesKmPerHour();
最后我們返回一架飛機 object
public Airoplane getMaxAiroplane(){
Airoplane airoplane = null;
int speedKmh = 0;
for(int i=0;i<warMachineArrayList.size();i++){
if(warMachineArrayList.get(i) instanceof Flies){
if(((Flies)warMachineArrayList.get(i)).fliesKmPerHour() > speedKmh){
airoplane = (Airoplane) warMachineArrayList.get(i);
speedKmh = ((Flies)warMachineArrayList.get(i)).fliesKmPerHour();
}
}
}
return airoplane;
}
您可以通過迭代 warMachineArrayList 找到具有所需值的實例。 然后你得到一些戰爭機器然后檢查並施放並做你需要的。 Somting 像這樣:
for (WarMachine warMashine : warMachineArrayList ) {
if (warMashine instanceof Airoplane ) {
Airoplane airplane = (Airoplane) warMashine;
// do with airplane anything you need
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.