簡體   English   中英

有沒有辦法訪問子類型方法而不使用泛型進行轉換

[英]Is there any way to access a sub-type method without casting using generic

要訪問子類方法需要向下轉換,是否有一種方法可以使用泛型而不以相同的方式進行類型轉換來實現這一點。

public class Main {
    public static void main(String[] args){

        Animal parrot = new Bird();
        ((Bird)parrot).fly();
    }
}

interface Animal{
    void eat();
}
class Bird implements Animal{
    @Override
    public void eat() {}
    public void fly(){}
}
public class Main {
    public static void main(String[] args){

        Animal parrot = new Bird();
        parrot.move();
    }
}

interface Animal{
    void eat();
    void move();

}
class Bird implements Animal{
    @Override
    public void eat() {}
    public void move(){fly();}
    public void fly(){}
}

我猜它可以用這樣的東西

接口旨在向已實現的類添加方法,而無需為此方法定義實際代碼,這意味着任何已實現的類肯定會具有相同的方法,但 2 個具有相同名稱的已實現方法不一定執行相同的操作。

用當前線程解釋它應該是:

interface Animal {
    void move();
}

class Bird implements Animal{
    public void move(){
        fly();
    }
}

class Dog implements Animal{
    public void move(){
        walk();
    }
}

這樣,每個類都有自己的 move 方法定義,而在main每個方法都將由object.move()調用。

這種做事方式允許從這樣的代碼開始

for (object tmp:objList){
   if(tmp.class=="Bird")
      tmp.fly();
   }
   else if (tmp.class=="Dog"){
      tmp.walk();
   }
...
}

for (object tmp:objList){
    tmp.move();
}

parrot 類應該繼承Bird 類,這樣就可以直接從parrot 對象調用fly 方法,不需要強制轉換。

public class Parrot extends Bird{

//have some filed or method

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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