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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© android2050 中级黑马   /  2013-3-21 13:54  /  1678 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈团辉 于 2013-3-22 08:51 编辑
  1. class A {
  2. public void getMessage() {
  3. showMessage();
  4. }

  5. private void showMessage() {
  6. System.out.println("A");
  7. }
  8. }

  9. public class B extends A {

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

  13. public static void main(String[] args) {
  14. A a = new B();
  15. B b = new B();
  16. a.getMessage();
  17. b.getMessage();

  18. }

  19. }
复制代码
为什么输出都是A
问题补充
这个我知道
B b = new B();
b.getMessage();
为什么调用的是父类的私有方法

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-21 23:22

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

7 个回复

倒序浏览
因为只有父类有getMessage方法,子类根本就没有这个方法,所以他会去父类中寻找该方法
b.getMessage(); 调用的是父类的公共方法,在B的公共方法中调用其父类的私有方法

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
                a.getMessage();//A
                b.getMessage();//自动调用父类方法,而私有方法不能被继承或被子类重写。所以调用showMessage()后显示A

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
因为父类的showMessage()是私有的,不能被子类继承或覆盖。所以a.getMessage()或者b.getMessage()方法调用的都是父类的showMessage();

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
额,这个编译会通过吗?
回复 使用道具 举报
(1)
        A a = new B();在父类中创建子类对象,使用父类中功能,体现了多态性。打印一个A
(2)
        getMessage()方法是在A类中定义的,所以当执行b.getMessage();这句代码时,
        JVM首先在B实例对象时无法找到匹配的getMessage()方法,所以就直接调用其父类的getMessage()方法。
        由于private方法不能重载,所以子类复写父类中的showMessage()是失败的。所以又打印一个A
(3)
        不光是private不能重载,static, final都不能重载。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1.     class A {
  2.     public void getMessage() {
  3.     showMessage();
  4.     }

  5.     private void showMessage() {
  6.     System.out.println("A");
  7.     }
  8.     }

  9.     public class B extends A {

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

  13.     public static void main(String[] args) {
  14.     A a = new B();//父类引用指向子类对象
  15.     B b = new B();
  16.     a.getMessage();//调用父类的getMessage()方法
  17.     b.getMessage();//此类中private方法不能被重写,所以打印A

  18.     }

  19.     }
复制代码
回复 使用道具 举报
因为子类没有重写父类的getMessage()方法,所以对象调用的getMessage()方法是从父类继承而来,而getMessage()方法中的show()调用的是本类的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马