Java,受保护的嵌套子类方法的访问不起作用。被迫公开

时间:2015-01-03 16:48:15

标签: java

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以具有与其自身类似的权限,而不会暴露访问权限。

这不构成错误吗?

在同一个包装中,这不会造成问题。受保护的作品(或实际上它的私有包)

0 个答案:

没有答案