public class A {
public void f1(String str) {
System.out.println("A.f1(String)");
this.f1(1, str);
}
public void f1(int i, String str) {
System.out.println("A.f1(int, String)");
}
}
public class B extends A {
@Override
public void f1(String str) {
System.out.println("B.f1(String)");
super.f1(str);
}
@Override
public void f1(int i, String str) {
System.out.println("B.f1(int, String)");
super.f1(i, str);
}
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.f1("Hello");
}
}
Tôi đang tìm kiếm rằng mã này sẽ đầu ra:Calling lớp cơ sở ghi đè chức năng từ phương pháp lớp cơ sở
B.f1(String)
A.f1(String)
A.f1(int, String)
Tuy nhiên, tôi nhận được:
B.f1(String)
A.f1(String)
B.f1(int, String)
A.f1(int, String)
Tôi hiểu rằng dưới ngữ cảnh của B "this" trong A.f1 (String) là thể hiện của B. Tôi có tùy chọn thực hiện chuỗi B1(). F1 (String) -> (A's) f1 (String) -> (A's) f1 (int, String) không?
Đây là một câu hỏi lý thuyết, thực tế giải pháp rõ ràng là trong A để thực hiện một hàm riêng mà cả f1 (String) và f1 (int, String) sẽ gọi.
Cảm ơn bạn,
Maxim.
Tôi đã thử sử dụng phản chiếu (nhận đối tượng Phương thức cho f1 (int, String) và gọi nó), nhưng nó không hoạt động. [Blog entry] [1] trong các blog của Sun chỉ ra rằng điều này là không thể với Java. [1]: http://blogs.sun.com/sundararajan/entry/calling_overriden_superclass_method_on – esaj
@esaj Đẹp tìm thấy trên liên kết –