限制可以在Java中实现接口的类

时间:2015-10-08 05:48:45

标签: java oop inheritance

在我们开始之前:我知道this question,在我的情况下,答案是行不通的。

所以我想说:

interface Iface
class SuperClass (this one is from external library and can't be changed)
class SubClass extends SuperClass
class OtherClass

有没有办法让Iface只能由SuperClass及其子类实现?所以在这种情况下:

class SuperClass implements Iface - would be good if I could edit that class
class SubClass implements Iface   - good
class OtherClass implements Iface - bad

附带问题:这是针对OOP原则还是代码不好的标志呢?

3 个答案:

答案 0 :(得分:3)

我看到的唯一选择是使接口包私有,并通过位于同一个包中的public SuperClass实现它。这样,您的包的用户将能够继承SuperClass,但无法直接实现您的界面。请注意,虽然这样接口本身变得不是很有用,因为外面的人甚至都看不到它。

一般来说,只需删除界面并用SuperClass替换它就可以解决您的问题。

答案 1 :(得分:2)

我相信并且引用JavaDocs公共接口无法被继承。根据定义,接口设计为以这种方式工作,并且我们在Java中具有访问说明符和内容,以使接口具有较低的可见性。愿意表现出一种方式。

答案 2 :(得分:0)

虽然我绝对同意@Tagir的答案(并且相信它应该被接受),但公平地说,如果他使用的话,可以对哪些类可以实现 runtime 中的接口进行限制他自己实​​施的ClassLoader。另外,我认为如果构建自己的JVM-based语言,可以在编译时完成这样的事情。