use*_*871 2 java polymorphism overriding casting typing
在下面的例子中,我认为它是关于运行时多态性的,但我无法弄清楚为什么要y.m1(x)
打印出来A
.我的理解是在类中y.m1()
调用m1()
方法B
,因为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();
}
}
Run Code Online (Sandbox Code Playgroud)
B
的m1
没有覆盖A
的m1
方法,因为它不取相同的参数.所以B类包含两个重载m1
方法,一个采用一个A
对象,另一个采用一个B
对象.这里只能使用静态多态,这就是为什么你可以看到这种行为.