Java转换,覆盖和多态

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)

rem*_*s4e 6

Bm1没有覆盖Am1方法,因为它不取相同的参数.所以B类包含两个重载m1方法,一个采用一个A对象,另一个采用一个B对象.这里只能使用静态多态,这就是为什么你可以看到这种行为.