2017-12-31 35 views
-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?. 
} 
+1

[最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve) –

+2

問題はありません。クラスは、 'i2'が' i1'を拡張しても 'i2'を実装することなく' i1'を実装できます。 'i2'メソッドにアクセスする必要があるところでは、' i1'ではなく 'i2'型のメソッドパラメータを宣言します。 –

+0

両方のインターフェイスを拡張する別のインターフェイスを作成することができます。パブリックインターフェイスi3はi1、i2 'を拡張します。 – Krzysztof

答えて

0

IBalancedTreeTreeにすることができます。

public interface IBalancedTree extends Tree { 
    public int rightRotation(); 
} 

そしてTree変数はTree方法を使用することができ、IBalancedTree変数は、両方の方法を使用することができます。でも、instanceofも使えると思います。

関連する問題