【发布时间】:2015-10-08 05:48:44
【问题描述】:
在我们开始之前:我知道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 原则还是表明这样做是代码错误?
【问题讨论】:
-
如果你最终限制了
Iface的可能实现,这可能表明你试图使用错误工具来解决你的问题。 -
@Spotted 好吧,也许我是。我只是试图将它限制在有意义的类中。 Iterable 对集合有意义,但对整数或 PrintWriter 没有意义。在我的例子中,接口
Iface只对SuperClass的子类有意义,但我想保留它一个接口。如果我让它们成为类,我就不能使用多重继承。如果不是Iface,而是Iface1、Iface2和Iface3,那将意味着创建7 个不同的类并扩展它们,而不是扩展SuperClass并添加任何需要的接口。 -
当然
PrintWriter实现Iterable是没有意义的。但这对Iterable界面的可见性/可访问性有影响吗?当然不是,因为只要合同履行完毕,每个人都应该被允许实现接口(=提供接口方法的实现)。 -
所以我只是依靠以后使用该代码的人的常识(和 javadoc 阅读)?因为唯一阻止我把它变成类的是我需要多重继承。
-
如果您想限制实现(无论出于何种原因),使用接口不会为您提供这种保证(因为它允许无限数量的可能实现)。根据您提供的上下文,我能给您的最佳建议是直接声明
SubClass中的方法并将所有方法标记为abstract或final。
标签: java oop inheritance