黑马程序员技术交流社区

标题: 关于继承里面private的问题? [打印本页]

作者: 昝文萌    时间: 2013-9-5 19:44
标题: 关于继承里面private的问题?
  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的方法!

作者: gulup    时间: 2013-9-5 20:01
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. }
复制代码

作者: itachi    时间: 2013-9-5 20:28
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
Zi.print()调用的任然是父类show()方法
作者: 焦允    时间: 2013-9-5 20:37
首先,一个类中private修饰的成员,只能在本类中使用,子类不能继承父类私有成员。
其次,在上面的代码中,子类中虽然没有直接定义print()方法,但是它却从父类中继承得到了,但是没有进行重写,所以子类的对象在调用时,只能去找父类中相应的方法。
作者: 花海1989    时间: 2013-9-5 21:31
打印结果就应该是fu,因为子当中没有print(),只能继承fu中的print()方法,然后再调用show()的方法,因为show()前面没有zi.show(),所以这次只能调用本类中的show()方法。所以打印结果为:fu
作者: 昝文萌    时间: 2013-9-6 09:08
恩,想明白了,谢谢大家!
作者: 胡志翔    时间: 2013-9-6 11:58
被private修饰的父类成员方法没法被子类覆写,只能在父类中调用。
作者: ......    时间: 2013-9-6 16:06
private 修饰的成员变量和方法都是私有的,不能被别的类访问到,也就不能被子类访问到,所以就不会被继承,因而也就不能被子类的方法覆盖。你所写的代码中子类只继承了父类的public void print()方法,没有继承父类的private String show()方法。public String show()只是被看做是你在子类中新定义的一个方法而已。
作者: yanglfree    时间: 2013-9-6 20:25
private修饰的方法子类又没有复写,所以直接在父类调用print()




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2