在我们开始之前:我知道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原则还是代码不好的标志呢?
答案 0 :(得分:3)
我看到的唯一选择是使接口包私有,并通过位于同一个包中的public SuperClass
实现它。这样,您的包的用户将能够继承SuperClass
,但无法直接实现您的界面。请注意,虽然这样接口本身变得不是很有用,因为外面的人甚至都看不到它。
一般来说,只需删除界面并用SuperClass
替换它就可以解决您的问题。
答案 1 :(得分:2)
我相信并且引用JavaDocs,公共接口无法被继承。根据定义,接口设计为以这种方式工作,并且我们在Java中具有访问说明符和内容,以使接口具有较低的可见性。愿意表现出一种方式。
答案 2 :(得分:0)
虽然我绝对同意@Tagir的答案(并且相信它应该被接受),但公平地说,如果他使用的话,可以对哪些类可以实现 runtime 中的接口进行限制他自己实施的ClassLoader。另外,我认为如果构建自己的JVM-based语言,可以在编译时完成这样的事情。