この質問が何度か聞かれたことは知っていますが、私の特定のケースについてアドバイスが必要です。エンコード可能とデコード可能があり、メッセージはエンコード可能とデコード可能の両方です。
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インターフェースの設計哲学に言及するいくつかの回答を見てきましたが、多重継承の代替としてインターフェースが導入された場合に保護されたメソッドを許可してはならない理由がよくわかりませんが、抽象クラスはそうです..