其他分享
首页 > 其他分享> > 如何重写方法来调用超类的超类方法?

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

作者:互联网

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

鉴于以下类层次结构(祖父母和父母来自第三方,因此,不在我的控制之下),我如何覆盖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