Trong tất cả các hướng dẫn từ khóa super
Tôi tìm thấy trực tuyến, thật khó để có được bất kỳ ví dụ nào gần hơn. Câu hỏi của tôi:Java - siêu từ khóa trong chủ đề mới Runnable - đề cập phương pháp không tĩnh qua lớp
sự khác biệt giữa
Tracker.super.track(event);
vàtest.parent.Tracker.track(event);
là gì?Tại sao công việc đầu tiên?
Tracker.super
là gì? Một đối tượng hoặc một lớp học?
lớp con:
package test;
public class Tracker extends test.parent.Tracker {
@Override
public void track(final Event event) {
Executor.execute(new Runnable() {
public void run() {
Tracker.super.track(event); //this works!! why??
super.track(event); // compile error: cannot resolve
test.parent.Tracker.track(event); //compile error: can only reference static method
}
});
}
}
siêu lớp
package test.parent;
public abstract class Tracker {
public void track(Event event) {}
}
tham khảo cập nhật:
Trong jls8, 15.11.2
"Giả sử rằng biểu thức truy cập trường T.super.f xuất hiện trong lớp C và lớp con ngay lập tức của lớp được biểu thị bằng T là lớp có tên đủ điều kiện là S. Nếu f trong S có thể truy cập từ C, thì T. super.f được coi như là biểu thức this.f trong phần thân của lớp S. Nếu không, một lỗi biên dịch sẽ xảy ra.
Như vậy, T.super.f thể truy cập vào e lĩnh vực có thể truy cập trong lớp S, thậm chí nếu lĩnh vực đó là ẩn bởi một tuyên bố của một trường e trong lớp T.
Đó là một thời gian biên dịch lỗi nếu lớp hiện tại không phải là một lớp bên trong của lớp T hoặc T riêng của mình."
'System.out.println (Tracker.class.getName()); ' –
@ElliottFrisch Có nghĩa là gì? Bạn có thể xây dựng? –
Bạn đang tạo (và hỏi về) đặt tên bóng trong một lớp địa phương ẩn danh (bạn cũng đang phân lớp 'Runnable'). Chọn bất kỳ tên nào bạn muốn tìm ra, và in nó bằng cách nhận được các lớp học. –