Đây là một câu hỏi nhiều hơn câu hỏi. Tôi có đoạn mã sau:phạm vi của hàm tạo riêng tư trong Lớp lồng nhau
public class PrivateBaseConstructor {
public static class BaseClass {
private BaseClass() {
}
}
public static class DerivedClass extends BaseClass {
public DerivedClass() {
super(); // 1*
}
}
}
Đây là lời kêu gọi super();
tại 1 * được phép sự kiện mặc dù các nhà xây dựng lớp cơ sở là private
. Nếu chúng ta viết các lớp học như các lớp riêng biệt trong cùng một gói:
BClass.java
public class BClass {
private BClass() {
}
}
DClass.java
public class DClass extends BClass {
public DClass() {
super(); // 2*
}
Trình biên dịch một cách đúng đắn cho lỗi tại 2 * từ constructor lớp cơ sở là không nhìn thấy được.
Tại sao trình biên dịch không gửi lỗi trong kịch bản đầu tiên của tôi khi cả hai lớp được khai báo tĩnh trong một lớp?
+1 để tham khảo chính xác! – Anshu