You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java继承中重写KlickEvent方法报错的解决咨询

解决Java继承中重写方法的报错问题

咱们直接说你遇到的两个核心问题,一步一步解决:

1. @Override注解报错的根本原因

父类Handlerclass里的KlickEvent方法是带两个int参数的:

public void KlickEvent(int x, int y)

但你在子类GUI里写的是无参的KlickEvent方法:

@Override
public void KlickEvent() { ... }

这不是重写(Override),而是重载(Overload)——相当于你定义了一个全新的方法,只是名字和父类的一样,但方法签名(参数类型、数量)完全不同。@Override注解的作用是告诉编译器“我要覆盖父类的某个方法”,但编译器找不到父类里有对应的无参KlickEvent,所以就抛出了那个错误提示。

解决方法很直接:让子类的KlickEvent方法签名和父类完全一致,保留@Override注解就行:

@Override
public void KlickEvent(int x, int y) {
    System.out.println("test");
}

2. 监听器注册的逻辑错误

你在GUI的构造方法里新建了一个Handlerclass实例并注册给Frame:

Handlerclass handler = new Handlerclass();
Frame.addMouseListener(handler);
Frame.addMouseMotionListener(handler);

但GUI本身就是Handlerclass的子类,你应该注册**当前GUI实例(this)**作为监听器。否则,Frame触发鼠标事件时,会调用那个新创建的父类实例的方法,根本不会触发你子类重写后的KlickEvent。

修正后的注册代码:

Frame.addMouseListener(this);
Frame.addMouseMotionListener(this);

修正后的完整GUI子类代码

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);
        // 注册当前GUI实例作为监听器
        Frame.addMouseListener(this);
        Frame.addMouseMotionListener(this);
        Frame.setVisible(true);
    }

    // 正确重写父类的KlickEvent方法
    @Override
    public void KlickEvent(int x, int y) {
        System.out.println("test");
    }
}

这样修改后,点击Frame窗口时,就会输出test而不是父类默认的klick了。

内容的提问来源于stack exchange,提问作者Jakob Kraus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:47:54