1

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

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

4

1 回答 1

0

java教程

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

这意味着您不能,除非您将界面可见性限制为包。但我想你不能。

package foo;

interface Foo
{
}

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

于 2014-07-10T13:28:03.027 回答