Jako przykład twisterki mózgu, profesor dał nam następujące ćwiczenie, aby dowiedzieć się o dziedziczeniu. Musieliśmy obliczyć wyjście.Wywołanie super metody z poziomu super klasy
//java
public class A {
public void f() {
System.out.println("A -> f()");
x = x + 4;
if (x < 15) this.f(); //the f-call
}
public int x = 5;
}
public class B extends A {
@Override
public void f() {
System.out.println("B -> f()");
x = x + 3;
super.f();
}
}
public class Main {
public static void
main(String[] args) {
A a = new B();
System.out.println("a.f()");
a.f();
System.out.println(a.x);
}
}
wyjście jest, jak się spodziewano,
- AF()
- B -> F()
- A -> C()
- B -> F ()
- A -> C()
Jednak teraz się zastanawiałem. Czy istnieje sposób na wykonanie f-call w wywołaniu f metody w A, nawet gdy używam go z obiektu B, podobnie do sposobu, w jaki wywołuję f z A w B, używając super.f() . Więc wyjście stałby się (chyba):
- af()
- B -> f()
- A -> f()
- A -> f()
Czy to możliwe? A jeśli tak, to w jaki sposób?
Uwaga: Nie jestem pewien, co praktyczne zastosowanie to będzie, ja po prostu staramy się nauczyć czegoś nowego: P
Tak więc, w zasadzie, chcesz wywołać samą metodę?Nie sądzę, że możesz to zrobić. –
Tak, dokładnie tego chcę. –
@CharlesWhitfield Oczywiście metoda sama się nazywa. Nazywa się to metodą rekursywną. Pytanie OP brzmi: czy możliwe jest określenie macierzystej wersji metody z klasy nadrzędnej. – shmosel