Java@Override不工作。仍在执行未重写的方法

Java@Override不工作。仍在执行未重写的方法,java,overriding,Java,Overriding,当我执行下面的小程序时,onStart()方法不会被重写,我会得到输出“onStartSuper”。我已经寻找过类似的问题,但没有找到有效的 Java代码: public class main extends OSAATE { @Override public void onStart() { System.out.println("Start"); } } public class OSAATE { public static OSAATE o

当我执行下面的小程序时,onStart()方法不会被重写,我会得到输出“onStartSuper”。我已经寻找过类似的问题,但没有找到有效的

Java代码:

public class main extends OSAATE {

    @Override
    public void onStart() {

        System.out.println("Start");
    }

}

public class OSAATE {

public static OSAATE osaate;

    public static void main(String[] args) {

        osaate = new OSAATE();

        osaate.onStart();
    }

    public void onStart() {

        System.out.println("onStartSuper");
    }

}

您是否尝试从另一个类而不是父类运行此操作

 public class main extends OSSATE{
   public static void main(String[] args) {

      osaate = new OSAATE();

      osaate.onStart();
 }

 @Override
 public void onStart() {

   System.out.println("Start");
}
}

这是因为
osaate
不是
main
的实例,而是超类
osaate
的实例,因此当然会执行super方法。顺便说一句,Override没有任何运行时效果,但用于编译器,也就是说,为了帮助它警告您可能出现的错误,例如认为没有注释的方法不会重写超级方法,或者带有注释的方法实际上不会重写任何内容。您从未实例化类
main
的实例,那么,为什么您希望调用
main
中的
onStart
方法呢?这里的每个人都想说的是,如果您希望运行被重写的函数,您应该拥有
osate=new main()
。如果您需要了解继承在java中是如何工作的,那么您真的应该阅读本文。我想将“publicstaticvoidmain(String[]args)”移到另一个类中。我的目标是扩展OSAATE并使用它,比如JFrame,等等……好吧,在您重写某些东西之前,它需要是一个子类。我建议您将main移到另一个类中并执行。