java重写不起作用

java重写不起作用,java,Java,子类“testC.java”中的方法不会覆盖超类“IMROBOS.java”中的方法 我也没有收到任何错误或警告,但它们没有按预期工作。 将显示超类方法的输出,而不是子类中方法的输出。如果我做错了什么,为什么没有收到错误消息? 在stackoverflow上有一个类似的问题,它提到将方法更改为“protected”是有效的,但在我的例子中没有 另外,请告诉我是否在testC.java中正确访问了变量“roboKey”? 谢谢 我的超类“IMROBOS.java” 我的子类“testC.java”

子类“testC.java”中的方法不会覆盖超类“IMROBOS.java”中的方法 我也没有收到任何错误或警告,但它们没有按预期工作。 将显示超类方法的输出,而不是子类中方法的输出。如果我做错了什么,为什么没有收到错误消息? 在stackoverflow上有一个类似的问题,它提到将方法更改为“protected”是有效的,但在我的例子中没有

另外,请告诉我是否在testC.java中正确访问了变量“roboKey”? 谢谢

我的超类“IMROBOS.java”

我的子类“testC.java”:


您仅在创建和使用super类的实例:

public static IMROBOS IMRobos = new IMROBOS();
...
jframe.addKeyListener( IMRobos );
这就是子类的
roboAction
未被调用的原因

如果需要调用子类的方法,请创建子类的实例:

public static IMROBOS IMRobos = new testC ();
顺便说一句,请使用Java命名约定(类名应大写,变量和方法名应使用驼峰大小写)。您的代码将更具可读性

public static IMRobos iMRobos = new TestC ();
请参阅以下连结:

据说:

执行的方法的版本将由 用于调用它的对象。如果父类的对象是 用于调用该方法,则父类中的版本将 但如果子类的对象用于调用 方法,则将执行子类中的版本

对于名为
IMRobos
的变量,您分配了一个
super class
的对象,即
IMRobos
,因此您得到了
super class
的行为,但是如果您分配了
sub class
的对象,即
testC
,您将得到
sub class
的行为

public static IMROBOS IMRobos = new testC ();
public static IMRobos iMRobos = new TestC ();