【发布时间】:2014-02-25 18:02:48
【问题描述】:
我正在完成一个 Java 多态性练习,并努力理解类型转换以及如何调用特定于子类的方法。我有一个班狗:
public class Dog
{
private final String breed;
public Dog(String b)
{
breed = b;
}
//More Dog methods (bark, eat, etc.)
}
还有一个可以拉雪橇的子类 SledDog:
public class SledDog extends Dog
{
public SledDog(String b)
{
super(b);
}
public void pullSled()
{
System.out.println("pulling the sled");
}
}
在我的申请中,我申报了 3 只狗 - 两只普通狗和一只雪橇犬。我将它们传递给 Dogs 数组,然后循环遍历该数组。如果狗是雪橇犬,我希望他 pullSled() - 但我不知道如何调用该方法,因为它属于子类。我的说明告诉我将数组项转换为 SledDog 对象,但我不知道如何或为什么必须这样做。我认为既然传递给数组的对象已经是一个 SledDog,它应该可以访问 pullSled()。这是我的尝试。
public class DogApp
{
public static void main(String[] args)
{
Dog firstDog = new Dog("Greyhound");
Dog secondDog = new Dog("Terrier");
SledDog sledDog = new SledDog("Husky");
Dog[] dogArray = new Dog[]{firstDog, secondDog, sledDog};
for(Dog d : dogArray)
{
//Makes sense, only want to pullSled() if d is a SledDog
if(d instanceof SledDog)
{
// This is the part I'm confused about
d = (SledDog) d;
d.pullSled();
}
}
}
}
【问题讨论】:
标签: java inheritance polymorphism subclass