黑马程序员技术交流社区

标题: 继承中的一个小问题 [打印本页]

作者: 逆袭的风    时间: 2013-8-6 10:08
标题: 继承中的一个小问题
本帖最后由 逆袭的风 于 2013-8-6 21:51 编辑

今天突然突发奇想敲了如下代码
  1. /*
  2. 验证能不能用子类抽象方法重父类实例方法
  3. */

  4. class Fu
  5. {
  6.         void eat()
  7.         {
  8.                 System.out.println("吃货");
  9.         }
  10.         void sleep()
  11.         {
  12.                 System.out.println("吃饱就睡");
  13.         }
  14. }
  15. abstract class Zi extends Fu//定义一个抽象子类
  16. {
  17.         void play()
  18.         {
  19.                 System.out.println("偶尔玩玩也不错嘛");
  20.         }
  21.         abstract void eat();//用抽象方法重写父类实例方法
  22. }
  23. class A extends Zi
  24. {
  25.         void eat()
  26.         {
  27.                 System.out.println("吃点好的");
  28.         }
  29. }

  30. class  ExtendsDemo
  31. {
  32.         public static void main(String[] args)
  33.         {
  34.                 A a=new A();
  35.                 a.eat();
  36.                 a.sleep();
  37.                 a.play();
  38.                
  39.         }
  40. }
复制代码
他还编译运行了
那为什么可以用子类中的抽象方法重写父类中的实例方法呢??????????

作者: Mr_Free    时间: 2013-8-6 10:19
覆盖的前提是,父类中方法和子类中的方法  参数列表 ,方法名,返回值 都相同,而且只要子类方法的权限大于父类,子类的方法就能复写父类方法的功能。

并没有说父类是实例方法,子类就不能用抽象方法覆盖了。只要满足覆盖的前提条件就行。
作者: yan    时间: 2013-8-6 10:21
我的理解是这样的,你的A是ZI的子类 ,A中的void eat()方法重写了ZI中的void eat() 方法,而ZI又重写了Fu的 void eat(),因此运行的是A中的方法,所以可以编译运行,希望能帮助到你
作者: 哪颗最亮的星星    时间: 2013-8-6 10:22
抽象类也是类的一种,只是它的方法没有具体的动作而已,父类可以被子类覆盖,改变方法里的行为,当然也可以被抽象的子类覆盖,改变不明确的行为!!!
作者: 草帽    时间: 2013-8-6 11:15
我觉得能不能要从覆写(Overriding)的定义原则上来说。
Java中,子类默认可以继承父类中的方法,而不需要重新编写相同的方法,但是有时候,子类并不想原封不动的继承父类中的方法,而是做出一定的修改,这就是采用方法的覆写(也成为覆盖)来实现的。Java中覆写指的是,在子类中对父类中同一重名函数实现部分加以改变,但与父类的该方法的方法名、返回类型和参数列表都保持一致。即子类对父类中的函数进行重新定义,子类中的新方法将覆盖父类原有的方法。覆写是父类与子类之间的一种多态表现。
作者: taotao    时间: 2013-8-6 11:24
这个例子说明,只要符合覆盖条件,子类方法就能覆盖父类方法!只是这种做法很2,完全颠覆了我们用覆盖的意图。
作者: 清心玉质    时间: 2013-8-6 11:35
虽然定义成抽象方法,但是并没有缩小父类的访问全新,也没有跑出更多异常,完全符合覆盖条件。
作者: kime    时间: 2015-7-2 23:32
抽象方法是没有方法体的,没有方法实现部分,因此是不能重写父类的方法的。




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