有什么方法可以访问子类型的方法而无需使用泛型进行强制转换

时间:2020-02-11 09:24:31

标签: java

要访问子类方法,需要向下转换,是否有一种方法可以使用泛型来实现此目的而无需以相同方式进行类型转换。

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(){}
}

2 个答案:

答案 0 :(得分:2)

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();
}

答案 1 :(得分:-1)

鹦鹉类应该扩展Bird类,然后您可以直接从鹦鹉对象调用fly方法,而无需强制转换。

public class Parrot extends Bird{

//have some filed or method

}