子类"testC.java中的方法不会覆盖超类"IMROBOS.java中的方法"我也没有收到任何错误或警告,但它们无法按预期工作。显示超类方法的输出,而不是子类方法的输出。如果我做错了什么,那么为什么我没有收到错误消息?一个类似的问题是关于stackoverflow的,它提到将方法更改为"受保护"是有效的,但在我的情况下并非如此。
另外,请告诉我我是否在testC中正确访问变量"roboKey".java?谢谢
我的超班"IMROBOS.java"
import java.awt.event.*;
class IMROBOS extends KeyAdapter {
public int roboKey;
public char roboKeyChar;
@Override
public void keyPressed( KeyEvent event) {
roboKeyChar = event.getKeyChar();
roboKey = event.getKeyCode();
roboAction( roboKey );
}
protected void roboAction( int k ){
System.out.println( roboKey );
}
}
我的子类"testC.java":
import java.awt.event.KeyEvent;
class testC extends IMROBOS {
public static IMROBOS IMRobos = new IMROBOS();
@Override
protected void roboAction( int k ){
System.out.println( " SubClass: " + IMRobos.roboKey + " | " + k + " | " + IMRobos.roboKeyChar );
}
public static void main( String[] a ){
JFrame jframe = new JFrame();
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.addKeyListener( IMRobos );
jframe.setSize(400, 350);
jframe.setVisible(true);
}
}
你只是在创建和使用超类的实例:
public static IMROBOS IMRobos = new IMROBOS();
...
jframe.addKeyListener( IMRobos );
这就是不调用子类roboAction
的原因。
如果需要调用子类的方法,请创建子类的实例:
public static IMROBOS IMRobos = new testC ();
顺便说一句,请使用 Java 命名约定(类名应大写,变量和方法名应使用驼峰大小写)。您的代码将更具可读性。
public static IMRobos iMRobos = new TestC ();
请参阅链接:https://en.wikipedia.org/wiki/Method_overriding
据说:
执行的方法的版本将由 用于调用它的对象。如果父类的对象是 用于调用该方法,则父类中的版本将 执行,但如果子类的对象用于调用 方法,则将执行子类中的版本。
对于名为IMRobos
的变量,您分配了一个对象super class
即 IMROBOS
所以你得到了super class
的行为,但如果你分配了sub class
的对象,即 testC
,你会得到sub class
的行为。