2017-12-14 7 views
1

私は基本クラスから継承するメソッドを持っています。
Iきた方法を継承し、それを上書きするが、同じことをやって、 は今、私は私があればこれを行うことができますもちろんenvoriment変数同じインプリメンテーションのためにいくつかのメソッドをオーバーライドします

//specific implications 
@Override 
protected boolean prepareDirectory(Configuration configuration, Logger logger) throws Exception 

    //logic here as before 
    if(env===“global”) { 

     //do something 
    } 
} 

に応じて追加のシナリオをサポートするために、すべてのメソッドを変更する必要が5クラスすべてのクラス内で動作しますが、これを克服するためのより良いアプローチがあります。
5クラスはすべてnew ifの内部で同じロジックを使用する必要があります。

+1

'if(env ===" global "){'は無効なJavaです。あなたはJavaとJavaScriptを混乱させますか?これらは2つの異なるプログラミング言語です。 – Jesper

+0

@Jesper - これはパスコードだけですが、envを取得すると仮定します –

+0

@Jesper:おそらく引用符のようなタイプミスです。パラメータの '@Outride'、' protected'、 'boolean'、' throws'、および型はすべてJavaScriptではなく、Javaを示唆しています。 –

答えて

2

これは抽象メソッドで実現できます。何かのように

abstract class BaseClass { 

    abstract void basePrepare(Configuration configuration, Logger logger); 

    protected boolean prepareDirectory(Configuration configuration, Logger logger) throws Exception { 
    if (/* condition */) { 
     basePrepare(configuration, logger); // implementing class does his stuff 
     } 
    } 
} 
+0

ありがとう、私は5クラスのそれぞれでこのクラスをどのように組み合わせて動作させるかをもっと説明できますか? –

+0

さらに、すべての5つのクラスは抽象から継承していますので、私は追加のコードで変更することはできません。 –

+0

私は投稿したコードスニペットで抽象クラスとして基本クラスを作成します。継承されたクラスは 'basePrepare'メソッドを実装する必要があります。実行される抽象メソッドが指定されているので、子クラスの 'prepareDirectory'をもうオーバーライドする必要はありません。別の振る舞いが必要な場合は、抽象メソッドを追加してください。基本ロジックは変更されず、子クラスは実装の詳細を知る必要はありません。 –

1

Java 8で作業している場合は、デフォルトの方法でInterfaceを使用する必要があります。

デフォルトのアクセス修飾子を使用して1つのメソッドを作成し、それを作成するのが最善の方法です。

1

あなたの5つのクラスの共通ロジックを行う基本クラスであることを行い、そして、同時に、彼らの特定のロジックを実行するためにそれらのそれぞれに可能性を与えることができます。

abstract class Base { 
     public RETURN_TYPE commonLogic(SOME_PARAMS){ 

     //common logic goes here 

     } 

    public abstract RETURN_TYPE specificLogic(SOME_PARAMS); 

    } 

この基本クラスを継承し、特定のロジックを実装します。

class Logic1 extends Base{ 

    @Override 
     public RETURN_TYPE specificLogic(SOME_PARAMS){ 

     // your specific logic 

     } 
    } 
関連する問題