Если вы хотите супер класса для вызова функции из подкласса, чистейший способ определить абстрактный рисунок, таким образом, вы явно знаете метод существует где-то и должны быть отменены подкласс.
Это в качестве примера, как правило, вы не вызываете метод суб в конструкторе, как вспомогательный экземпляр не инициализируется еще ... (причина, почему у вас есть «не определено» в примере на ваш вопрос в)
abstract class A {
// The abstract method the subclass will have to call
protected abstract doStuff():void;
constructor(){
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
}
class B extends A{
// Define here the abstract method
protected doStuff()
{
alert("Submethod called");
}
}
var b = new B();
Протестируйте его Here
И если вам нравится @Max, вы действительно хотите избежать реализации абстрактного метода во всем мире, просто избавитесь от него. Я не рекомендую этот подход, потому что вы можете забыть, что вы переопределяете метод.
abstract class A {
constructor() {
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
// The fallback method the subclass will call if not overridden
protected doStuff(): void {
alert("Default doStuff");
};
}
class B extends A {
// Override doStuff()
protected doStuff() {
alert("Submethod called");
}
}
class C extends A {
// No doStuff() overriding, fallback on A.doStuff()
}
var b = new B();
var c = new C();
Попробуйте Here
Вызов виртуального метода в конструкторе считается плохой практикой в любом языке ООП: https://google.com/search?q=virtual+method+in+constructor –