Ai đó có thể giải thích cho tôi sự khác biệt giữa các lớp protected
/public
Bên trong là gì?Lớp học bên trong được bảo vệ/công cộng
Tôi biết rằng public
các lớp bên trong là tránh càng nhiều càng tốt (như được giải thích trong số article) này.
Nhưng từ những gì tôi có thể biết, không có sự khác biệt giữa việc sử dụng protected
hoặc public
công cụ sửa đổi.
Hãy xem ví dụ sau:
public class Foo1 {
public Foo1() { }
protected class InnerFoo {
public InnerFoo() {
super();
}
}
}
...
public class Foo2 extends Foo1 {
public Foo2() {
Foo1.InnerFoo innerFoo = new Foo1.InnerFoo();
}
}
...
public class Bar {
public Bar() {
Foo1 foo1 = new Foo1();
Foo1.InnerFoo innerFoo1 = foo1.new InnerFoo();
Foo2 foo2 = new Foo2();
Foo2.InnerFoo innerFoo2 = foo2.new InnerFoo();
}
}
Tất cả điều này biên dịch và có giá trị cho dù Tôi tuyên bố InnerFoo
protected
hoặc public
.
Tôi đang thiếu gì? Vui lòng chỉ cho tôi một trường hợp có sự khác biệt khi sử dụng protected
hoặc public
.
Cảm ơn.
Ok. Tôi thấy sự nhầm lẫn của tôi. Bởi vì các lớp bên trong giống như các thành viên của lớp bao quanh, tôi đã suy nghĩ về các thành viên được bảo vệ. Cảm ơn. –
@bruno conde: các lớp được bảo vệ * là * giống như các thành viên được bảo vệ. –
Nói cách khác, "được bảo vệ" trong Java, dù được áp dụng cho các thành viên hay các lớp bên trong, khác với C++ và C#. Nó cấp quyền truy cập vào các lớp khác trong cùng một gói (không gian tên). – Qwertie