gpt4 book ai didi

java - Java 中的类不是抽象且不覆盖错误

转载 作者:行者123 更新时间:2023-12-02 03:00:06 25 4
gpt4 key购买 nike

我在使用 Java 时遇到编译时错误:

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

这是类(class):

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

我能更好地解释这个错误的含义吗?

最佳答案

如何尽可能简单地重现该错误:

Java代码:

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

}

interface Animal{
abstract boolean roar();
}

显示此编译时错误:

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

为什么无法编译?

因为:

  1. 您创建了一个 Cat 类,它实现了 Animal 接口(interface)。
  2. 您的名为 Animal 的接口(interface)有一个名为 roar 的抽象方法,必须重写该方法。
  3. 你没有提供方法咆哮。有很多方法可以消除编译时错误。

补救措施1,让Cat重写抽象方法roar()

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,将 Cat 更改为如下所示的抽象:

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,让猫停止执行Animal

package javaapplication3;

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

}

interface Animal{
abstract boolean roar();
}

这使得 roar() 不再是动物必须知道如何做的事情的契约。

补救措施 3,扩展类而不是实现接口(interface)

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

要使用的补救措施取决于代表所代表问题的最佳模型。该错误是为了敦促您停止“通过布朗运动编程”。

关于java - Java 中的类不是抽象且不覆盖错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57057100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com