我可以在不使用'default'的情况下将继承限制为包吗?

时间:2011-08-09 14:47:38

标签: java inheritance

我有一些类需要能够在同一个包中扩展。但我不希望我的包之外的任何人扩展我的课程。其他包中的类需要能够调用我的类,所以我不能使用'default'。

有没有办法(可能通过界面)我可以实现这个目标?

3 个答案:

答案 0 :(得分:7)

如果你的构造函数包是本地的,它只能在同一个包中扩展,但如果公共成员是公共类,则可以在任何类中访问它。

答案 1 :(得分:6)

我是通过创建一个default可见性的基类来实现的,然后使用外部类可以调用但不扩展的public final类来扩展它。例如:

class MyBase {
    public void doSomething() { ... }
}

public final class PublicBase extends MyBase { }

class ExtendedBase {
    @Override
    public void doSomething() { ... }
}

答案 2 :(得分:0)

您可以创建一个接口来使用该类和一个返回具体实现的工厂类,这两个实现都是公共的,因此在包外可见。然后使用默认可见性创建具体类。