2016-07-01 5 views
0

imは抽象クラスからメソッドを呼び出そうとしていますが、どこが間違っているのか分かりません。 は、これは抽象クラスである:抽象クラスメソッドを呼び出す

public abstract class Sim implements Runnable { 
    public Sim(String id, String type, Buffer<Measure>queue){ 
     this.id = id; 
     this.type = type; 
     this.queue = queue; 
     this.midnight = computeMidnightMilliseconds(); 
    } 

    public void stopMe() { 
     stopCondition = true; 
    } 
} 

iはメソッドstopMeを(呼び出したい)、私は

public class StopThread extends Sim { 
    protected StopThread(){super();}//what should i put here? 

    @Override 
    public void run(){ 
     stopMe(); 
    } 

    @Override 
    public void stopMe() { 
     stopCondition = true; 
    } 
} 

怒鳴るコードを使用するすべてのヘルプは、事前に 感謝をいただければ幸いです:)

+0

何が問題なの?あなたは例外を取得していますか? – nlloyd

+0

@nlloydはい最初の問題は、スーパーがparamsを必要としていることです。何を入れるべきですか?他の例では、抽象クラスを拡張するときにsuperを使うのが普通ですが、使用するロジックについてはわかりません。 –

+0

を参照してください。アイデアは、stopConditionが真である限り、データを生成するスレッドがあるということです。今私はデータの生成を停止するには、stopMeメソッドを使用したいと思います。だから私はstopConditionの値をfalseに変更したいと思っています – emotionlessbananas

答えて

0

スーパークラスのメソッドを呼び出す場合は、super.stopMe()を使用してください。ファンクションがスーパークラスSimで同じことをするので、のstopMeメソッドをオーバーライドする必要はありません。

StopThreadクラスのコンストラクタメソッドでは、これらのパラメータも渡すことができます。私はここに置くべきか; // {スーパー()}

StopThread()保護
public StopThread(String id, String type, Buffer<Measure> queue) { 
    super(id, type, queue); 
} 
+0

本当にどのようにスーパーが動作するのかについて実際にはわかりません。私はそれを保護されたStopThread(){super();}から保護されたStopThread(){ super.stopMeGently();}に変更しようとすると、 "Simクラスで使用可能なデフォルトのコンストラクタがありません" –

+0

@Anja。 M superはあなたが拡張したクラスのインスタンスを意味し、super()を呼び出すとスーパークラスのコンストラクタを呼び出します。 super.someMethod()を呼び出すと、そのメソッドが呼び出されます。 –

+0

それは今意味があります。しかし、私はまだシムクラスで利用可能なデフォルトのコンストラクタがないと言う理由でそれを得るのですか?どこが間違っていますか? –

0

:それはのように見えるのだろうか?

あなたは文字列IDを与える必要があります文字列型とが今までそれが何であるバッファキュー...

例:

public class StopThread extends Sim { 
protected StopThread(){ 
    super(foo.getId(), foo.getType(), foo.getQueue); 
} 


@Override 
public void run(){ 
    while(!stopMe()){ 
     /// your logic 
    } 
} 
+0

よく、別のクラスの変数として保存されている場合、どのように文字列型のString型とバッファーキューを与えることができますか?バッファはインタフェースpublic interfaceバッファです { void add(T t); リスト readElements(); } –

+0

ありがとう、私はその論理を持っています。だから、私はそれを私は何かをする必要があります:StopThread stopThread = new StopThread(idnumber、type、InnerBuffer.getInstance()); stopThread.stopMeGently(); ?それは何もしません:/ –

+0

is stopCondition SuperClassの変数is is ?? –

関連する問題