Như một ví dụ về não-một giáo sư của tôi đã cho chúng tôi tập thể dục sau đây, để tìm hiểu về thừa kế. Chúng tôi phải tìm ra đầu ra.Gọi phương pháp siêu từ trong phạm vi siêu lớp
//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);
}
}
Kết quả là, như tôi mong đợi,
- af()
- B -> f()
- A -> f()
- B -> f ()
- A -> f()
Tuy nhiên, tôi đã tự hỏi. Có cách nào để gọi f-call trong A gọi phương thức f trong A, ngay cả khi tôi sử dụng nó từ đối tượng B, tương tự như cách tôi gọi f từ A trong B bằng super.f() . Vì vậy, đầu ra sẽ trở thành (tôi nghĩ):
- af()
- B -> f()
- A -> f()
- A -> f()
Điều này có khả thi không? Và nếu vậy, làm thế nào?
Lưu ý: Tôi không chắc chắn những gì các ứng dụng thực tế điều này sẽ là, tôi chỉ cố gắng tìm hiểu những điều mới mẻ: P
Vì vậy, về cơ bản, bạn muốn có một phương pháp để tự gọi?Tôi không nghĩ rằng bạn có thể làm điều đó –
Vâng, đó là chính xác những gì tôi muốn nó làm. –
@CharlesWhitfield Tất nhiên một phương pháp có thể tự gọi. Nó được gọi là một phương pháp đệ quy. Câu hỏi của OP là liệu có thể chỉ định phiên bản gốc của một phương thức từ bên trong lớp cha. – shmosel