public static void main(String[] args) {
A a = new B();
B b = new B();
a.getMessage();
b.getMessage();
}
}
为什么输出都是A
B b = new B();
b.getMessage();
为什么调用的是父类的私有方法
A a = new B();
a.getMessage();
为什么调用的是父类的私有方法 作者: 柴乔军 时间: 2013-2-4 21:10
private方法是不能被重写的,而getMessage又没有被重写,就是从父类中调用了getMessage,然后调用了父类的showMessage作者: 范天成 时间: 2013-2-4 22:08
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();