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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 昝文萌 中级黑马   /  2013-9-5 19:44  /  1349 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Fu
  2. {
  3.         private String show()//此方法用private修饰
  4.         {
  5.                 return "Fu";
  6.         }
  7.         public void print()
  8.         {
  9.                 System.out.println(show());
  10.         }
  11. }
  12. class Zi extends Fu
  13. {
  14.     public String show()//重新定义一个与父类一样的show方法
  15.         {
  16.                 return "Zi";
  17.         }
  18. }
  19. class DemoExtends
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Zi zi = new Zi();
  24.                 zi.print();//这里打印的是什么?
  25.         }
  26. }
复制代码
打印结果是Fu,为什麽?为什麽print()没有调用Zi的方法!

评分

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

查看全部评分

8 个回复

倒序浏览
privae修饰符修饰的方法,不能被覆盖,所以你在Zi类中定义的那个show方法,是属于子类中的新方法。
print方法你没有重写,其调用的仍然是父类的show方法。
因为上面说了,Zi类中的show方法是Zi类扩展的,不属于重写,所以不会去调用Zi类中的show方法。
如果你需要print方法输出ZI,可以重写print方法的实现。:
  1. class Fu
  2. {
  3.         private String show()//此方法用private修饰
  4.         {
  5.                 return "Fu";
  6.         }
  7.         public void print()
  8.         {
  9.                 System.out.println(show());
  10.         }
  11. }
  12. class Zi extends Fu
  13. {
  14.     public String show()//重新定义一个与父类一样的show方法
  15.         {
  16.                 return "Zi";
  17.         }
  18.         public void print()
  19.         {
  20.                         System.out.println(this.show());
  21.         }

  22. }
  23. class Test
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 Zi zi = new Zi();
  28.                 zi.print();//这里打印的是什么?
  29.         }
  30. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
Zi.print()调用的任然是父类show()方法

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
首先,一个类中private修饰的成员,只能在本类中使用,子类不能继承父类私有成员。
其次,在上面的代码中,子类中虽然没有直接定义print()方法,但是它却从父类中继承得到了,但是没有进行重写,所以子类的对象在调用时,只能去找父类中相应的方法。

评分

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

查看全部评分

回复 使用道具 举报
打印结果就应该是fu,因为子当中没有print(),只能继承fu中的print()方法,然后再调用show()的方法,因为show()前面没有zi.show(),所以这次只能调用本类中的show()方法。所以打印结果为:fu

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 赞一个!

查看全部评分

回复 使用道具 举报
恩,想明白了,谢谢大家!
回复 使用道具 举报
被private修饰的父类成员方法没法被子类覆写,只能在父类中调用。
回复 使用道具 举报
private 修饰的成员变量和方法都是私有的,不能被别的类访问到,也就不能被子类访问到,所以就不会被继承,因而也就不能被子类的方法覆盖。你所写的代码中子类只继承了父类的public void print()方法,没有继承父类的private String show()方法。public String show()只是被看做是你在子类中新定义的一个方法而已。
回复 使用道具 举报
private修饰的方法子类又没有复写,所以直接在父类调用print()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马