ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何重写方法来调用超类的超类方法?

2019-07-13 03:13:36  阅读:377  来源: 互联网

标签:java oop class-design


我的一部分认为这不应该是可能的(即使它是),但无论如何我会问.

鉴于以下类层次结构(祖父母和父母来自第三方,因此,不在我的控制之下),我如何覆盖Child中的myMethod(),以便绕过Parent中的重写实现并调用Grandparent中的实现?

class Grandparent {
   public void myMethod() {
      // do stuff
   }
}

class Parent extends Grandparent {
   @Override public void myMethod() {
      super.myMethod();
      // do something else
   }
}

class Child extends Parent {
   @Override public void myMethod() {
      // ??? I want to *only* do what Grandparent did here
   }
}

假设Parent类提供了许多其他有用的行为,并且是Child的层次结构的关键元素(换句话说,我不是在寻找“让Child成为祖父母的子类”).

解决方法:

继承背后的想法是每个类定义他们需要的方法,因此您不需要检查任何代码.

看起来你在这里继承只是为了重用代码,这不是子类化的想法.

也许你应该有一个帮助成员来完成你需要的一些任务,而不是子类化,并让“Child”和“Parent”类扩展为“祖父母”.

你需要问自己的主要问题是:“孩子真的是父母,祖父母或者neiter的后裔吗?”换句话说,对于Child的每个实例,我可以说它是父母吗?

如果答案是否定的,那么你就是错误的继承:继承应该意味着什么,而不仅仅是代码重用(即福特也是汽车,而不仅仅是“福特”使用“汽车”方法).

标签:java,oop,class-design
来源: https://codeday.me/bug/20190713/1445550.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有