防止继承包外的接口

时间:2014-06-23 08:37:20

标签: java inheritance constructor base-class default-method

我有一个无状态的抽象基类,不应该从它的包外部继承:

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支持接口中的默认方法,我想将抽象类转换为接口。使用接口,是否也可以阻止当前包之外的继承?

1 个答案:

答案 0 :(得分:0)

来自java tutorial

  

..界面中的所有抽象,默认和静态方法都是隐式公共的,因此您可以省略public修饰符。

这意味着除非您将接口可见性限制为包,否则您无法使用。但我想你不能。

package foo;

interface Foo
{
}

我想你可以编写一个自定义注释(像@InstanciableOnlyInMyPackage这样的链接)并将其放在界面上。然后使用Annotation Processing Tool使用引发编译器错误。