2013-05-15 12 views
7

でエラーをオーバーライドしません。ここでクラスは抽象ではないと私は、Javaとコンパイル時のエラー取得していたJava

MyClass is not abstract and does not override abstract method 
onClassicControllerRemovedEvent(
wiiusej.wiiusejevents.wiiuseapievents.ClassicControllerRemovedEvent) 
in wiiusejevents.utils.WiimoteListener) 

をクラスである:

import wiiusej.WiiUseApiManager; 
import wiiusej.Wiimote; 
import wiiusej.wiiusejevents.physicalevents.ExpansionEvent; 
import wiiusej.wiiusejevents.physicalevents.IREvent; 
import wiiusej.wiiusejevents.physicalevents.MotionSensingEvent; 
import wiiusej.wiiusejevents.physicalevents.WiimoteButtonsEvent; 
import wiiusej.wiiusejevents.utils.WiimoteListener; 
import wiiusej.wiiusejevents.wiiuseapievents.DisconnectionEvent; 
import wiiusej.wiiusejevents.wiiuseapievents.NunchukInsertedEvent; 
import wiiusej.wiiusejevents.wiiuseapievents.NunchukRemovedEvent; 
import wiiusej.wiiusejevents.wiiuseapievents.StatusEvent; 


public class MyClass implements WiimoteListener{ 

    public void onButtonsEvent(WiimoteButtonsEvent arg0) { 
     System.out.println(arg0); 
     if (arg0.isButtonAPressed()){ 
      WiiUseApiManager.shutdown(); 
     } 
    } 

    public void onIrEvent(IREvent arg0) { 
     System.out.println(arg0); 
    } 

    public void onMotionSensingEvent(MotionSensingEvent arg0) { 
     System.out.println(arg0); 
    } 

    public void onExpansionEvent(ExpansionEvent arg0) { 
     System.out.println(arg0); 
    } 

    public void onStatusEvent(StatusEvent arg0) { 
     System.out.println(arg0); 
    } 

    public void onDisconnectionEvent(DisconnectionEvent arg0) { 
     System.out.println(arg0); 
    } 

    public void onNunchukInsertedEvent(NunchukInsertedEvent arg0) { 
     System.out.println(arg0); 
    } 

    public void onNunchukRemovedEvent(NunchukRemovedEvent arg0) { 
     System.out.println(arg0); 
    } 

    public static void main(String[] args) { 
     Wiimote[] wiimotes = WiiUseApiManager.getWiimotes(1, true); 
     Wiimote wiimote = wiimotes[0]; 
     wiimote.activateIRTRacking(); 
     wiimote.activateMotionSensing(); 
     wiimote.addWiiMoteEventListeners(new MyClass()); 
    } 
} 

私はより良い説明を得ることができますこのエラーは何を意味しますか?

答えて

3

インターフェイスを実装するときは、そのインターフェイスにすべてのメソッドを実装する必要があります。 onClassicControllerRemovedEventを実装していません。

7

クラスはWiimoteListenerのインターフェイスonClassicControllerRemovedEventを実装しています。ただし、インタフェースのメソッドはabstractです。つまり、基本的には実装されていないコントラクトだけです。あなたはここで、物事のいずれかを実行する必要があります。

  1. この方法と、あなたのクラスのコンクリートを作るこのインタフェースが宣言して他のすべてのメソッドを実装し、または
  2. それがために使用することはできませんので、あなたのクラスの抽象を宣言しますインスタンスをインスタンス化し、スーパークラスとしてのみ使用します。
+0

System.out.println(arg0); } シンボルを見つけることができません。実装するクラスを見つけるために.jarを調べる必要がありますか? – Phil

+0

実装は目的によって異なりますが、実装ではエラーを取り除く必要があります。それが何のシンボルを見つけることができないのですか? –

+0

ClassicControllerRemovedEvent – Phil

2

WiimoteListenerは、onClassicControllerRemovedEventメソッドを定義するインターフェイスです。あなたのクラスは、インターフェイスが宣言する、あるいはエラーなしでコンパイルしないすべてのメソッドを定義しなければなりません。

WiimoteListenerインターフェイスの異なるバージョン(そのインターフェイスを含むjarの古いバージョンまたは新しいバージョンに基づいています)を使用してこのクラスを設計し、そのバージョンが上記の方法を宣言していないこともあります。そうであれば、あなたのクラスが使用するように作られたジャーのバージョンに対してビルドする必要があります。

Javaコードを:

package javaapplication3; 
public class JavaApplication3 { 
    public static void main(String[] args) { 
    } 
} 
class Cat implements Animal{ 

} 

interface Animal{ 
    abstract boolean roar(); 
} 

は、このコンパイル時のエラー表示:単にできるだけそのエラーを再現する方法

3

Cat is not abstract and does not override abstract method roar() in Animal 

をなぜしませんそれはコンパイル?

ので:あなたは、インタフェースの動物を実装するクラスの猫を作成

  1. Animalという名前のインターフェイスには、roarというオーバーライドする必要がある抽象メソッドがあります。
  2. あなたはメソッドの轟音を提供しませんでした。コンパイル時のエラーを取り除く方法はたくさんあります。

対策1、猫は抽象メソッドの轟音()

package javaapplication3; 

public class JavaApplication3 { 
    public static void main(String[] args) { 
     Cat c = new Cat(); 
     System.out.println(c.roar()); 
    } 
} 
class Cat implements Animal{ 
    public boolean roar(){ 
     return true; 
    } 
} 

interface Animal{ 
    abstract boolean roar(); 
} 

対策2をオーバーライドする必要があり、変更の猫は、このような抽象的にする:

package javaapplication3; 

public class JavaApplication3 { 
    public static void main(String[] args) { 
     Cat c; 
    } 
} 
abstract class Cat implements Animal{ 

} 
interface Animal{ 
    abstract boolean roar(); 
} 

意味もうCatをインスタンス化することはできません。

対策3は、猫が轟音()もはや動物が行う方法を知っていなければならないもののために契約していない動物

package javaapplication3; 

public class JavaApplication3 { 
    public static void main(String[] args) { 
     Cat c = new Cat(); 
    } 
} 
class Cat{ 

} 

interface Animal{ 
    abstract boolean roar(); 
} 

を実装停止があります。

対処3、むしろ治療薬を使用する

package javaapplication3; 

public class JavaApplication3 { 
    public static void main(String[] args) { 
     Cat c = new Cat(); 
     System.out.println(c.roar()); 
    } 
} 
class Cat extends Animal{ 

} 
class Animal{ 
    boolean roar(){ 
     return true; 
    } 
} 

インタフェースを実装するよりも、クラスを拡張すると、最良のモデルが示されている問題を表すために何であるかに依存します。エラーは、あなたが "ブラウン運動によるプログラミング"をやめることを促すためのものです。 ます。public void onClassicControllerRemovedEvent(ClassicControllerRemovedEventのarg0){:どのように私はこの方法をimplemetする方法excactly知っているあなたに感謝し、私はそれが具体的な作ります、私が使用しているライブラリーでは、私は次のことを試してみました、[OK]を

関連する問題