Klasse is niet abstract en overschrijft geen fout in Java

Ik krijg een compileerfout met Java:

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

Hier is de les:

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

Kan ik een betere uitleg krijgen van wat deze fout betekent?


Antwoord 1, autoriteit 100%

Hoe u die fout zo eenvoudig mogelijk kunt reproduceren:

Java-code:

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

Toont deze fout bij het compileren:

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

Waarom compileert het niet?

Omdat:

  1. Je hebt een klasse Cat gemaakt die een interface Animal implementeert.
  2. Uw interface genaamd Animal heeft een abstracte methode genaamd roar die moet worden overschreven.
  3. Je hebt niet voor methode gebrul gezorgd. Er zijn veel manieren om de compileerfout te elimineren.

Remedie 1, laat Cat de abstracte methode roar() overschrijven

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

remedie 2, verander kat om een ​​abstracte zoals deze te zijn:

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

Wat betekent dat u CAT niet meer kunt oplossen.

Oplossing 3, Laat de kat stoppen met implementeren van dier

package javaapplication3;
public class JavaApplication3 {
    public static void main(String[] args) {
        Cat c = new Cat();
    }
}
class Cat{ 
}
interface Animal{
    abstract boolean roar();
}

die Roar () niet langer een contract maakt voor dingen die dieren moeten weten hoe te doen.

Remedy 3, breidt een klasse uit in plaats van een interface te implementeren

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

De te gebruiken remedie is afhankelijk van wat het beste model is om het probleem te vertegenwoordigen. De fout is er om u aan te dringen “Programmering door Brownian Motion”.


Antwoord 2, Autoriteit 92%

Je klas implementeert een interface WiimoteListener, die een methode onClassicControllerRemovedEventheeft. De methoden in interfaces zijn echter abstract, wat betekent dat het in wezen gewoon contracten zijn zonder implementaties. Je moet een van de dingen hier doen:

  1. Implementeer deze methode en alle andere methoden die deze interface declareert, die je klasse concreet maken, of
  2. Declareer je klasse abstract, zodat het niet kan worden gebruikt om instanties te instantiëren, maar alleen als een superklasse.

Antwoord 3, autoriteit 25%

Als je een interface implementeert, moet je alle methoden in die interface implementeren. U heeft onClassicControllerRemovedEventniet geïmplementeerd.


Antwoord 4, autoriteit 17%

Het lijkt erop dat WiimoteListenereen interface is die een onClassicControllerRemovedEvent-methode definieert. Je klasse moet alle methoden definiëren die een interface declareert, anders compileert het niet zonder fouten.

Het kan ook zijn dat deze klasse is ontworpen met een andere versie van de WiimoteListener-interface (gebaseerd op een oudere of nieuwere versie van de jar die die interface bevat) en dat die versie de bovengenoemde methode. Als dat zo is, moet je misschien gewoon bouwen tegen de versie van de jar waarvoor je klas is gemaakt om te gebruiken.


Antwoord 5, autoriteit 8%

Ontbrekende parameters, inconsistente parametertypes, ontbrekende methodedefinities, controleer dit allemaal.

In mijn geval:

public class California {
            @override
            public String transportation(String transportationType, String transportationId, String transportationArea)
        {
        return transportationType;
    } public static void main(String[] args) {
                California c = new California();
            }
        }
        interface Oakland{
           String transportation(String transportationType, String transportationId);
        }

Dit heeft niet gecompileerd omdat transportmethode een van de params miste!

Other episodes