Jeśli chcesz super klasa wywołać funkcję z podklasy, najczystszym sposobem jest zdefiniowanie abstrakcyjny wzór, w ten sposób jawnie wiedzieć metoda istnieje gdzieś i muszą być zastępowane przez podklasę.
to jako przykład, zazwyczaj nie wywołać metodę sub wewnątrz konstruktora jako sub instancji nie jest jeszcze zainicjowany ... (powód, dla którego mają „nieokreślone” na przykład dane pytanie)
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();
Przetestuj Here
A jeśli lubisz @Max, naprawdę chcesz uniknąć wprowadzania abstrakcyjnej metody wszędzie, po prostu się ją pozbyć. Nie polecam tego podejścia, ponieważ możesz zapomnieć, że nadpisujesz metodę.
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();
Wypróbuj Here
Wywołanie metody wirtualnych w konstruktorze jest uważane za złą praktyką w dowolnym języku OOP: https://google.com/search?q=virtual+method+in+constructor –