2017-12-01 8 views
0

Featureという基本クラスと、基本クラスの拡張である別の2つのクラスFeature1があります。 つまり、Feature1Featureに拡張されています。私が何をしたいかサブクラスがオーバーライドされたメソッド内で特定のデータを提供するようにする方法

Feature1は基本Featureクラスを拡張するので、それはcapture()メソッド内captureIdという変数を提供することもFeature1を強制的にcapture()メソッドをオーバーライドしますが、私はまた、やりたいことはある、 べきです。これは、私は各機能が拡張強制したいわけオーバーライドされたcapture()方法

コードcaptureIdを提供しなければならないFeatureクラス:

class Feature { 
    ... 
    public void capture() { 

    } 
} 

class Feature1 extends Feature { 
    ... 
    @Override 
    public void capture() { 
     //captureId must be mandatory to be provided by each class extends Feature 
    } 
} 
+0

可能性は確信しています。あなたは何を達成しようとしていますか? –

+0

私は@YasserHussainと一緒にいます。たぶんあなたの目標を説明するなら、私たちはそこに到達するより良い方法を見つけることができます。定義上、サブクラスは、独自のcapture()関数の実装を提供することを意図しています。これには、その範囲内で定義された任意の変数が含まれる。したがって、関数の各実装に特定の名前のローカル変数が含まれていることを強制する方法はありません。 – Rolandus

+0

captureIdとは何ですか?基本クラスのprotectedメンバーフィールド? –

答えて

2

はあなたがcapture()がキャプチャIDを返すようにしたいと言っている意味ですか?もしそうなら、あなたは数を返すようにcapture()を必要とする可能性がある、とサブクラスは、それを上書きする必要がありますので、抽象それを残す:

public class Feature 
{ 
    public abstract int capture(); 
} 

は、あなただけの何かがあなたのキャプチャIDに起こっていることを確認しますか?これを行うもう1つの方法は、目的の振る舞いを持つ基本メソッドを記述し、その中で呼び出される抽象メソッドを持つことです。例:

public class Feature 
{ 
    protected abstract int doSomethingWithCaptureId(int input); 

    public void capture() { 
     int captureId = this.doSomethingWithCaptureId(this.inputId); 
     doSomeOtherTask(); 
    } 
} 

public class Feature1 
{ 
    @Override 
    protected int doSomethingWithCaptureId(int input) { 
     // put your logic here 
     return 1; 
    } 
} 
+1

[Template pattern](https://en.wikipedia。 org/wiki/Template_method_pattern) –

関連する問題