Javaでのメソッドディスパッチと混同しています。最初のメソッド「a.m1(b)」がクラス A を呼び出すのはなぜですか?
呼び出し変数は a です。ランタイム型は B ですね。
class A {
public void m1(A a){
System.out.println("A-m1");
}
public void m1(){
System.out.println("A-m1");
}
}
class B extends A {
public void m1( B b){
System.out.println("B-m1");
}
public void m1(){
System.out.println("B-m1");
}
}
public class HelloWorld {
public static void main(String[] args) {
B b = new B();
A a = new B();
a.m1(b);//prints A-m1
a.m1();//prints B-m1
}
}