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对象.这里只能使用静态多态,这就是为什么你可以看到这种行为.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |