A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张庚 中级黑马   /  2013-2-4 20:52  /  1083 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A {
public void getMessage() {
showMessage();
}

private void showMessage() {
System.out.println("A");
}
}

public class B extends A {

private void showMessage() {
System.out.println("B");
}

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();
为什么调用的是父类的私有方法

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

3 个回复

倒序浏览
private方法是不能被重写的,而getMessage又没有被重写,就是从父类中调用了getMessage,然后调用了父类的showMessage

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报
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




回复 使用道具 举报
你调用的是从父类继承而来的方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马