B b = new B();
b.getMessage(); B继承了A,但是B类没有覆写getMessage();所以b.getMessage()这条语句调用的是A中的getMessage()方法。getMessage()方法首先会去调用B中的showMessage() ,但是属性是私有,这时getMessage()转而去调用A中的showMessage() ,而getMessage()是类A的成员函数,所以访问当然可以访问A类的私有成员函数。如果你将showMessage()全改为public,输出结果全是B
A a = new B();
a.getMessage(); 这个是典型的多态,因为B类中没有覆写A类的getMessage()方法,所以情况和上面的一样。如果你在B类中覆写getMessage(),则输出结果全是B。
看下面的例子:
class A {
public void getMessage() {
showMessage();
}
public void showMessage() { //改为public
System.out.println("A");
}
}
public class B extends A {
public void showMessage() { //改为public
System.out.println("B");
}
public static void main(String[] args) {
A a = new B();
B b = new B();
a.getMessage();
b.getMessage();
}
}
输出结果:B B
|