-3
私は2つのインターフェイス、インターフェイスi1とインターフェイスi2を持っています。どちらもそれぞれ異なる方法があります。 クラスc1がインターフェイスi1とインターフェイスi2を拡張しています。
私は依存性注入を使用しており、c1依存性を注入したいと考えています。 良いプログラミングの習慣として、私たちはまたインターフェイスするようにコードする必要があります。しかし、i1を使って参照変数を宣言すれば、i2メソッドを使用することはできません。逆もまた同様です。クラス内に複数のインターフェイスを実装する
またi1は他のクラスでも実装されているので、i1とi2は別々のインターフェイスにしたいと思います。これらのクラスはi2メソッドを必要としません。
この問題を解決する最善の方法は何ですか?
例えば:
public interface Tree {
public int findMin();
public int findMax();
}
public interface IBalancedTree {
public int rightRotation();
}
class NormalTree extends Tree {
public int findMin(){
// implementing find min
}
public int findMax(){
// implementing find max
}
}
class BalancedTree extends Tree, IBalancedTree {
public int findMin(){
// implementing find min
}
public int findMax(){
// implementing find max
}
public int rightRotation(){
// implementing right rotation
}
}
class TreeManager {
private Tree tree
public TreeManager(Tree tree){
this.tree=tree
}
//calling tree methods
//even if i pass balanced tree object i can only call methods of tree class?.
}
[最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve) –
問題はありません。クラスは、 'i2'が' i1'を拡張しても 'i2'を実装することなく' i1'を実装できます。 'i2'メソッドにアクセスする必要があるところでは、' i1'ではなく 'i2'型のメソッドパラメータを宣言します。 –
両方のインターフェイスを拡張する別のインターフェイスを作成することができます。パブリックインターフェイスi3はi1、i2 'を拡張します。 – Krzysztof