好的,我知道这个问题已经被问过几次了,但我需要关于我的具体案例的建议。有 Encodable 和 Decodable 之分,而 Message 既是 Encodable 又是 Decodable:
interface Encodable { void encode(); }
interface Decodable { void decode(); }
class Message implements Encodable, Decodable { ... }
void processEncodable(Encodable encodable) {
...
encodable.encode();
...
}
除了Message,还有其他的Encodable(和Decodable),需要在processEncodable中处理。到目前为止一切顺利,但问题是我想从包外部隐藏 encode() 和 decode() ,并且 Java 接口不允许受保护/私有方法。有人可能会建议抽象类,但正如您所见,Message 应该同时继承 Encodable 和 Decodable,所以情况并非如此。有什么建议么?
这些天我非常喜欢 Scala,Scala 特征允许受保护/私有方法,恕我直言,这更直观。我已经经历了一些提到Java接口设计理念的答案,但我真的不明白为什么如果引入接口作为多重继承的替代方案,它为什么不应该允许受保护的方法,而抽象类则允许......