package main;
public class main {
static class A{
public void play() {
System.out.println("A");
}
}
static class B extends A{
public void play() {
System.out.println("B");
}
}
public static void tune(A i) {
i.play();
}
public static void main(String[] args) {
B b = new B();
tune(b);
}
}
b向上转型之后为基类A,那么应该调用的是A类中的play方法,但是程序输出的确是B,这是为什么?
兄弟,你继承这一章没理解好,B类继承了A,B类重载了A类的play方法,所以B类的实例调用的就必然是B类的play方法啊。
你new的是B对象,用A引用接没问题,但无论你怎么搞,调用的都是B的方法。你可以在tune方法里打个断点,看看参数 i 的类型,必定是B类型的