簡體   English   中英

調用特定子類的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM