如何重写方法来调用超类的超类方法?
作者:互联网
我的一部分认为这不应该是可能的(即使它是),但无论如何我会问.
鉴于以下类层次结构(祖父母和父母来自第三方,因此,不在我的控制之下),我如何覆盖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