我有一个无状态的抽象基类,不应该从它的包外部继承:
package foo;
public abstract class Foo
{
// some abstract methods
// one concrete method
// no state
// Prevent classes outside of package foo from inheriting
Foo()
{
}
}
现在Java 8支持接口中的默认方法,我想将抽象类转换为接口。使用接口,是否也可以阻止当前包之外的继承?
答案 0 :(得分:0)
..界面中的所有抽象,默认和静态方法都是隐式公共的,因此您可以省略public修饰符。
这意味着除非您将接口可见性限制为包,否则您无法使用。但我想你不能。
package foo;
interface Foo
{
}
我想你可以编写一个自定义注释(像@InstanciableOnlyInMyPackage
这样的链接)并将其放在界面上。然后使用Annotation Processing Tool使用引发编译器错误。