Java 方法不会覆盖超类型的方法
Java method does not override a method from a supertype
我刚刚学习继承在 java 中的工作原理,我遇到了一个问题。
我有一个基础 class,它定义了方法 KlickEvent
import java.awt.*;
import java.awt.event.*;
public class Handlerclass implements MouseListener, MouseMotionListener
{
public Handlerclass()
{
}
public void mouseClicked(MouseEvent event)
{
}
public void mousePressed(MouseEvent event)
{
KlickEvent(event.getX(),event.getY());
}
public void mouseReleased(MouseEvent event)
{
System.out.println("Eine Maustaste wurde losgelassen");
}
public void mouseEntered(MouseEvent event)
{
System.out.println("Eine Maus hat den Bereich betreten");
}
public void mouseExited(MouseEvent event)
{
System.out.println("Eine Maus hat den Bereich verlassen");
}
public void mouseDragged(MouseEvent event)
{
//System.out.println("Eine Maus wird herumgezogen");
}
public void mouseMoved(MouseEvent event)
{
//System.out.println("Eine Maus bewegt sich");
}
@SuppressWarnings("unused")
public void KlickEvent(int x, int y)
{
System.out.println("klick");
}
}
另一个 class 继承自那个 class 并且我试图覆盖方法 KlickEvent 但我收到错误消息 "method does not override or implement a method from a supertype".
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class GUI extends Handlerclass
{
JFrame Frame;
int Sizex, Sizey;
public GUI()
{
this(800,600,"Unbenannt");
}
public GUI(int x, int y, String Fensternahme)
{
Sizex = x;
Sizey = y;
Frame = new JFrame(Fensternahme);
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame.setSize(Sizex,Sizey);
Handlerclass handler = new Handlerclass();
Frame.addMouseListener(handler);
Frame.addMouseMotionListener(handler);
Frame.setVisible(true);
}
@Override
public void KlickEvent()
{
System.out.println("test");
}
}
我该如何解决这个问题?很抱歉这个问题被问了很多,但我还是想不通。
您无法覆盖 和 方法更改签名。添加参数类型以匹配 KlickEvent
的签名。喜欢,
@Override
public void KlickEvent(int x, int y) {
// ...
}
方法不一样,Handlerclass
上的有2个参数而GUI
上的有一个,所以它不是覆盖Handlerclass
中的方法而是定义自己的 KlickEvent
方法。
我打赌你的 IDE 应该会在 GUI
class 中的方法左侧用黄色/红色标记(或任何其他符号)通知你(也许超过行号)。
因此,正如@ElliottFrisch 在他的回答中提到的那样,添加参数类型以匹配父级的签名 class 所以它实际上是覆盖它而不仅仅是定义自己的方法。
顺便说一句 Java naming conventions:
firstWordLowerCaseVariable
firstWordLowerCaseMethod()
FirstWordUpperCaseClass
ALL_WORDS_UPPER_CASE_CONSTANT
这将使您和我们更容易阅读您的代码,例如:
JFrame Frame; -> JFrame frame;
int Sizex, Sizey; -> int sizeX, sizeY;
我刚刚学习继承在 java 中的工作原理,我遇到了一个问题。
我有一个基础 class,它定义了方法 KlickEvent
import java.awt.*;
import java.awt.event.*;
public class Handlerclass implements MouseListener, MouseMotionListener
{
public Handlerclass()
{
}
public void mouseClicked(MouseEvent event)
{
}
public void mousePressed(MouseEvent event)
{
KlickEvent(event.getX(),event.getY());
}
public void mouseReleased(MouseEvent event)
{
System.out.println("Eine Maustaste wurde losgelassen");
}
public void mouseEntered(MouseEvent event)
{
System.out.println("Eine Maus hat den Bereich betreten");
}
public void mouseExited(MouseEvent event)
{
System.out.println("Eine Maus hat den Bereich verlassen");
}
public void mouseDragged(MouseEvent event)
{
//System.out.println("Eine Maus wird herumgezogen");
}
public void mouseMoved(MouseEvent event)
{
//System.out.println("Eine Maus bewegt sich");
}
@SuppressWarnings("unused")
public void KlickEvent(int x, int y)
{
System.out.println("klick");
}
}
另一个 class 继承自那个 class 并且我试图覆盖方法 KlickEvent 但我收到错误消息 "method does not override or implement a method from a supertype".
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class GUI extends Handlerclass
{
JFrame Frame;
int Sizex, Sizey;
public GUI()
{
this(800,600,"Unbenannt");
}
public GUI(int x, int y, String Fensternahme)
{
Sizex = x;
Sizey = y;
Frame = new JFrame(Fensternahme);
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame.setSize(Sizex,Sizey);
Handlerclass handler = new Handlerclass();
Frame.addMouseListener(handler);
Frame.addMouseMotionListener(handler);
Frame.setVisible(true);
}
@Override
public void KlickEvent()
{
System.out.println("test");
}
}
我该如何解决这个问题?很抱歉这个问题被问了很多,但我还是想不通。
您无法覆盖 和 方法更改签名。添加参数类型以匹配 KlickEvent
的签名。喜欢,
@Override
public void KlickEvent(int x, int y) {
// ...
}
方法不一样,Handlerclass
上的有2个参数而GUI
上的有一个,所以它不是覆盖Handlerclass
中的方法而是定义自己的 KlickEvent
方法。
我打赌你的 IDE 应该会在 GUI
class 中的方法左侧用黄色/红色标记(或任何其他符号)通知你(也许超过行号)。
因此,正如@ElliottFrisch 在他的回答中提到的那样,添加参数类型以匹配父级的签名 class 所以它实际上是覆盖它而不仅仅是定义自己的方法。
顺便说一句 Java naming conventions:
firstWordLowerCaseVariable
firstWordLowerCaseMethod()
FirstWordUpperCaseClass
ALL_WORDS_UPPER_CASE_CONSTANT
这将使您和我们更容易阅读您的代码,例如:
JFrame Frame; -> JFrame frame;
int Sizex, Sizey; -> int sizeX, sizeY;