我想从特定的祖先那里隐藏一些父母的方法。 但是,我无法弄清楚如何做到这一点。
假设我们有:
class GrandPa {
// must not be accessible from the GrandSon:
protected gradPaDoing() {}
}
class Parent extends GrandPa {
// Here probably must be some kind of adapter between GrandPa and GrandSon...
}
class GrandSon extends Parent {
grandSonDoing() {
this.gradPaDoing(); // I'd like to make it impossible
}
}
有没有办法实现它?
答案 0 :(得分:1)
我认为你的设计存在缺陷。如果可能,请考虑更改您的设计。
我的意思是:不应该在层次结构中减少可见性。但是,如果需要,可能会增加。试想一下,它会有意义。
您可以做的是,从祖先类中一起删除该grandPaDoing方法。将其移动到界面。并且只有在需要该行为时才使您的叶类实现该接口。
这种方法将更清洁,更一致,更有OOP方式。
编辑:
此解决方案仍适用于您在评论中提到的案例。方法如下:
假设您要将anOldMethod重命名为aNewMethod并阻止旧方法再次使用。
然后简单地说:
step1)创建一个接口,将aNewMethod添加到此接口,然后使您的叶类实现此接口。
step2)删除anOldMethod表单父类。如果不存在方法,则无法再访问它。如果需要,可以通过@Deprecated弃用它们,如@toskv建议的那样。