我有下面这个类和一些public
方法:
class A {
public methodOne() {}
public methodTwo() {}
}
我有一个扩展了上面的类。
class B extends A {}
如何使类A
中的public
的methodOne
和methodTwo
变成类B
中的private
或protected
?
/*--- Expectation ---*/
const a = new A();
const b = new B();
a.methodOne(); //OK
b.methodOne(); //Error!
你无法做到这一点。这将使B存在于一个边缘地带,声称它与a兼容(因为它扩展了a(,但也与a不兼容(因为他与a没有相同的公共属性(。
以下功能应该完全可以编写:
function doStuff(param: A) {
param.methodOne();
}
但子类化的好处之一是多态性。doStuff函数不需要担心它是被传递了一个A,还是被传递了从A扩展的东西。Typescript支持这一点,因此将把以下两行都视为完全可以(如果B从A扩展(:
doStuff(new A())
doStuff(new B())
要做到这一点,B必须具有与A相同的所有属性。它可能拥有更多,但不能拥有更少。
如果你不想拥有与A相同的属性,那么我建议不要从它扩展。