有没有办法阻止创建匿名(内部)类,但允许继承类?

时间:2014-12-19 10:38:23

标签: java inheritance

我有这堂课:

public class MainClass {
    ...
}

这个类应该由另一个类扩展,以继承它的attirubtes和方法。 所以应该允许这样做:

public class ChildrenClass extends MainClass {
    ...
}

但我不希望其他开发人员从我的MainClass创建内部类(匿名类),如下所示:

MainClass anonymousClassInstance = new MainClass(){...}

有没有办法在java中做到这一点?

1 个答案:

答案 0 :(得分:1)

如果所有子类都在同一个包中,您可以将MainClass包私有,以避免被其他包中的任何类扩展。

package mainPackage;

class MainClass { // note the missing public modifier

}

同一个包中的子类:

package mainPackage;

public class SubClass extends MainClass { // this extension works

}

其他包装中的扩展名:

package externalPackage;

import mainPackage.MainClass;

public class SomeClass {

    public void foo() {
        MainClass foo = new MainClass() { 
        // doesn't work because `MainClass` is not visible
        };
    }

}

问题是,MainClass在其他包中根本看不到。在上面的示例中,import语句和变量声明也失败了。它仍然可能是您特殊情况的解决方案。