2012-04-02 37 views
0

Javaで "ShowHistory"というクラスを呼び出そうとしたとき、エラーが表示されます: "ShowHistoryタイプは継承した抽象メソッドActionListener.actionPerformed(ActionEvent) 「Javaでクラスを呼び出そうとしたときにエラーが発生しました

は、ここに私のコードです:

public class ShowHistory extends JFrame implements ActionListener { 
    ... 
    } 

IDEは抽象クラスであることを、このクラスを作るために私をお勧めしますが、私はそれが抽象的であることを変換するときに、コードの別の部分はうまくいかない:

  ShowHistory frame = new ShowHistory(); 

「ShowHistoryタイプをインスタンス化できません」というメッセージが表示されます。

この問題を解決する方法はありますか?

+0

ActionListenerからすべてのメソッドを実装しましたか? –

+1

エラーメッセージはかなり役に立ちます。 –

+0

はい。 ActionListenerの使用に問題はありますか? –

答えて

1

タイプShowHistoryは継承した抽象メソッドActionListenerを実装する必要があります。actionPerformed(のActionEvent)は

これが意味することは、あなたのクラスShowHistoryActionListenerを実装するために、それはインタフェースで定義されたすべてのメソッドを実装しなければならないということです。この場合、方法はactionPerformed(ActionEvent)です。 ShowHistoryはインスタンス化できないように、あなたはabstractShowHistoryを変更

public void actionPerformed(ActionEvent e) { ... } 

は、あなたがそれを作った、そしてそれは ActionListenerでメソッドを定義するための責任を負うことになります(抽象的でない場合は、インスタンス化することができる)子クラスです。

1

クラスimplementsのインターフェイスを使用する場合は、各インターフェイスのメソッドの実装を提供する必要があります。

ここで問題のインターフェイスはActionListenerです。単一のメソッドactionPerformed(ActionEvent)が含まれています。

あなたのクラス、ShowHistory、このメソッドの実装を提供する必要があります。

public void actionPerformed(ActionEvent e) { ... } 

エラーメッセージは、現在のクラスがこれを実行しないことを語っています。

0

抽象クラスをインスタンス化することはできません。

最初のエラーメッセージの場合は、クラスactionPerformedを実装するだけで、インタフェースActionListenerのメソッドをオーバーライドすることができます。クラスがインタフェースを実装する場合、インタフェースに含まれるすべてのメソッドを実装する必要があります。 のように、ActionListenerには、実装する必要がある方法が1つしかありません。actionPerformedです。

0

抽象クラスをインスタンス化することはできません。それはabstractの定義です!

ただし、サブクラスは、匿名クラスとしてインスタンス化することもできます。たとえば、

0

インターフェイスを実装するか、またはインターフェイスまたは抽象クラスで定義されたすべてのメソッドを実装する必要があるクラスを拡張する場合です。

特殊クラス(同じ階層の下位)でクラスを抽象化することができる実装を提供したい場合(ideによって提案されているように)、その場合はオブジェクトを作成できません。

関連する問題