public abstract class SuperClass<T> {
public Nested nested = new Nested(); // This might still be a case where the public have access to an instance.
protected SuperClass() {
create(null);
}
protected abstract void create(T t);
protected void test(T t) {
}
protected class Nested {
protected void method() {
}
}
}
// For this example this class should be in a different package
public class ExtendsSuperClass extends SuperClass<Void> {
@Override
protected void create(Void v) {
super.test(v); // Works fine
nested.method(); // Does not when outside of the same package. protected must then become public.
}
}
如果ExtendsSuperclass位于不同的包中,您现在必须将创建方法公开为公开方法。
SuperClass可以拥有一个暴露给公众的Nested实例,同时仍然需要控制子类可以访问哪些方法以及哪些方法不能公开。
现在不可能。 SuperClass可以访问私有和受保护的方法,如果您选择离开扩展程序,可以扩展SuperClass以具有与其自身类似的权限,而不会暴露访问权限。
这不构成错误吗?
在同一个包装中,这不会造成问题。受保护的作品(或实际上它的私有包)