【发布时间】:2019-06-26 02:54:43
【问题描述】:
我还是 Java 新手,我对 Java 如何处理引用子类引用的超类变量感到有些困惑。 我有两个班级:
public class Animal{
}
public class Dog extends Animal{
}
然后我创建了一个 Run 类,如下所示:
public class Run{
public void get_dog (Dog a){
System.out.println("got a dog");
}
public static void main(String[] args) {
Animal a_animal = new Dog(); //Create a Animal variable with Dog class
Run test = new Run();
System.out.println(a_animal.getClass().getSimpleName());
test.get_dog(a_animal); //This will not run
}
}
getClass().getSimpleName() 告诉我 a_animal 的类是 Dog。但是 test.get_dog(a_animal) 不会运行,说 get_name() 只会采用 Dog 类而不是 Animal 类。那么 a_animal 的类到底是什么?
【问题讨论】:
-
声明的类型是
Animal,但实际类型是Dog。 -
和 declared 类型规则在 Java 中,除非您编写显式 type cast,如
test.get_dog((Dog)a_animal); -
你可以参考我在下面@Wayne Yiquan 给出的解释和答案
标签: java inheritance reference