2013-05-15 12 views
7

sto ottenendo un errore di tempo di compilazione con Java:classe non è astratta e non sostituisce l'errore in Java

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

Qui è la classe:

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()); 
    } 
} 

Posso avere una migliore spiegazione della cosa significa questo errore?

risposta

3

Quando si implementa un'interfaccia, è necessario implementare tutti i metodi nell'interfaccia. Non hai implementato onClassicControllerRemovedEvent.

7

La classe implementa un'interfaccia WiimoteListener, che ha un metodo onClassicControllerRemovedEvent. Tuttavia, i metodi nelle interfacce sono abstract, il che significa che sono essenzialmente solo contratti senza implementazioni. Hai bisogno di fare una delle cose qui:

  1. implementare questo metodo e tutti gli altri metodi che questa interfaccia dichiara, che rendono il vostro concreto classe o
  2. dichiarare il vostro classe astratta, quindi non può essere utilizzato per istanze istanziate, utilizzate solo come superclasse.
+0

Ok, grazie, quindi mi renderà concreta, nella libreria che sto usando, come faccio a sapere esattamente centrale come implemet questo metodo, ho provato quanto segue: public void onClassicControllerRemovedEvent (ClassicControllerRemovedEvent arg0) { System.out.println (arg0); } ma non riesce a trovare il simbolo, devo scavare nel .jar per trovare la classe da implementare ?? – Phil

+0

L'implementazione dipende dai tuoi scopi, ma la tua implementazione dovrebbe eliminare gli errori. Quale simbolo segnala non può trovare? –

+0

ClassicControllerRemovedEvent – Phil

2

Risulta che WiimoteListener è un'interfaccia che definisce un metodo onClassicControllerRemovedEvent. La classe deve definire tutti i metodi dichiarati da un'interfaccia o che non verranno compilati senza errori.

Può anche darsi che questa classe sia stata progettata utilizzando una versione diversa dell'interfaccia WiimoteListener (basata su una versione precedente o più recente del contenitore che include quell'interfaccia) e che la versione non dichiarasse il metodo sopra menzionato. Se è così, potrebbe semplicemente essere necessario costruire contro la versione del jar che la tua classe è stata creata per l'uso.

3

come riprodurre questo errore nel modo più semplice possibile: codice

Java:

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

} 

interface Animal{ 
    abstract boolean roar(); 
} 

mostra questa compilazione errore di tempo:

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

Perché non lo farà compila?

Perché:

  1. si è creato un gatto classe che implementa un animale interfaccia.
  2. L'interfaccia chiamata Animale ha un metodo astratto chiamato ruggito che deve essere sovrascritto.
  3. Non hai fornito il metodo ruggito. Esistono molti modi per eliminare l'errore del tempo di compilazione.

Soluzione 1, ha Cat override del metodo rombo abstract()

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(); 
} 

Soluzione 2, cambiamento Cat essere un estratto simili:

package javaapplication3; 

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

} 
interface Animal{ 
    abstract boolean roar(); 
} 

che significa non puoi più istanziare Cat.

Rimedio 3, hanno gatto fermare attuazione degli animali

package javaapplication3; 

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

} 

interface Animal{ 
    abstract boolean roar(); 
} 

Il che rende rombo() non è più un contratto per le cose che gli animali devono sapere come fare.

Soluzione 3, si estendono una classe anziché implementando un'interfaccia

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; 
    } 
} 

Il rimedio da utilizzare dipende ciò che il modello migliore è quello di rappresentare il problema rappresentata. L'errore è lì per spingerti a smettere di "programmare con il movimento browniano".

Problemi correlati