如何从TypeScript中的特定子项中隐藏父方法?

时间:2017-11-12 12:38:35

标签: oop typescript

我想从特定的祖先那里隐藏一些父母的方法。 但是,我无法弄清楚如何做到这一点。

假设我们有:

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
   }
}

有没有办法实现它?

1 个答案:

答案 0 :(得分:1)

我认为你的设计存在缺陷。如果可能,请考虑更改您的设计。

我的意思是:不应该在层次结构中减少可见性。但是,如果需要,可能会增加。试想一下,它会有意义。

您可以做的是,从祖先类中一起删除该grandPaDoing方法。将其移动到界面。并且只有在需要该行为时才使您的叶类实现该接口。

这种方法将更清洁,更一致,更有OOP方式。

编辑:

此解决方案仍适用于您在评论中提到的案例。方法如下:

假设您要将anOldMethod重命名为aNewMethod并阻止旧方法再次使用。

然后简单地说:

step1)创建一个接口,将aNewMethod添加到此接口,然后使您的叶类实现此接口。

step2)删除anOldMethod表单父类。如果不存在方法,则无法再访问它。如果需要,可以通过@Deprecated弃用它们,如@toskv建议的那样。