Java方法不会覆盖超类型

时间:2018-01-19 23:53:44

标签: java superclass

我正在学习java中的继承是如何工作的,我遇到了一个问题。

我有一个定义方法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");
}
}

另一个类继承自该类,并且我试图覆盖方法KlickEvent但是我得到错误消息"方法不会覆盖或实现超类型的方法"。

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

我该如何解决这个问题?我很抱歉这个问题已被提出很多问题,但我仍然无法弄明白。

2 个答案:

答案 0 :(得分:2)

您无法覆盖方法更改签名。添加参数类型以匹配KlickEvent的签名。像,

@Override
public void KlickEvent(int x, int y) {
    // ...
}

答案 1 :(得分:1)

方法不一样,Handlerclass上的方法有2个参数,而GUI上的方法有任何参数,所以它不会覆盖Handlerclass中的方法,而是定义它拥有KlickEvent方法。

我敢打赌你的IDE应该通过GUI类中的方法左边的黄色/红色标记(或任何其他符号)通知你(可能超过行号)。

因此,正如@ElliottFrisch在他的回答中提到的,添加参数类型以匹配父类的签名,因此它实际上覆盖它而不仅仅是定义它自己的方法。

BTW旁注是遵循Java naming conventions

  • firstWordLowerCaseVariable
  • firstWordLowerCaseMethod()
  • FirstWordUpperCaseClass
  • ALL_WORDS_UPPER_CASE_CONSTANT

这将使您和我们更容易阅读您的代码,例如:

JFrame Frame; -> JFrame frame;
int Sizex, Sizey; -> int sizeX, sizeY;