【发布时间】:2014-09-13 22:10:41
【问题描述】:
在下面的示例中,我认为它与运行时多态性有关,但我不明白为什么 y.m1(x) 会打印出 A。我的理解是y.m1()调用B类中的m1()方法,因为y包含B的对象。既然x是作为参数传给它的,而且它属于A这个比B宽的类,会不会导致运行时错误?另外,z.m1(y) 怎么会打印出A 呢?
非常感谢!
class A {
public void m1(A a) {
System.out.println("A");
}
}
class B extends A {
public void m1(B b) {
System.out.println("B");
}
}
class D2 {
public static void main(String[] args) {
A x = new A();
A y = new B();
B z = new B();
}
}
【问题讨论】:
-
使用@Override 注释会有所帮助,这样编译器会告诉您是否未能覆盖任何内容。在这种情况下,A 和 B 中的方法具有不同的参数类型,因此没有覆盖。
标签: java casting polymorphism overriding typing