我有这堂课:
public class MainClass {
...
}
这个类应该由另一个类扩展,以继承它的attirubtes和方法。 所以应该允许这样做:
public class ChildrenClass extends MainClass {
...
}
但我不希望其他开发人员从我的MainClass创建内部类(匿名类),如下所示:
MainClass anonymousClassInstance = new MainClass(){...}
有没有办法在java中做到这一点?
答案 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语句和变量声明也失败了。它仍然可能是您特殊情况的解决方案。