我有一些类需要能够在同一个包中扩展。但我不希望我的包之外的任何人扩展我的课程。其他包中的类需要能够调用我的类,所以我不能使用'default'。
有没有办法(可能通过界面)我可以实现这个目标?
答案 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)
您可以创建一个接口来使用该类和一个返回具体实现的工厂类,这两个实现都是公共的,因此在包外可见。然后使用默认可见性创建具体类。