【发布时间】:2015-04-23 23:23:48
【问题描述】:
我对 Java 中的多态性有一个基本的怀疑。我在一个名为 AnimalTestDrive.java 的文件中编写了以下代码。根据我的说法,下面的代码应该特别适用于粗体行,但不幸的是它不是。你能解释一下原因吗,我给出了以下错误:
class Dog extends Animal {
public void dogMethod() {
System.out.println("In Dog method");
}
}
public class AnimalTestDrive {
public static void main(String args[]) {
Dog d = new Dog();
d.dogMethod();
d.animalMethod();
Animal animal = new Animal();
animal.animalMethod();
animal = d;
**animal.dogMethod(); // THIS IS NOT WORKING**
}
}
【问题讨论】:
-
根据我的说法,下面的代码应该可以工作你的理由是什么?为什么它应该起作用?
-
输出为:javac AnimalTestDrive.java AnimalTestDrive.java:24: error: cannot find symbol animal.dogMethod(); ^ 符号:方法 dogMethod() 位置:变量 Animal 类型 Animal 1 错误
-
对,所以它不起作用。为什么你认为应该这样做?
-
@NikhilSharma:你从哪里得到“然后使用符号 as superclassRef.subclassMethod() 调用 subclassType 上的方法”部分?你在哪里读到的?
-
@NikhilSharma:这并不是说“然后你可以调用仅在
Dog中声明的方法”,是吗?是的,编译时类型和执行时类型可以不同 - 但您推断的远不止这些。
标签: java inheritance polymorphism