我们可以在 java 中覆盖 main 方法吗?

java 8object oriented programmingprogramming

覆盖是实现多态性的机制之一。当我们有两个类时,其中一个类使用 extends 关键字继承另一个类的属性,并且这两个类具有相同的方法(包括参数和返回类型)(例如,sample())。

因为它是继承。如果我们实例化子类,则会在子类对象中创建超类成员的副本,因此这两个方法都可用于子类(对象)。

当我们调用此方法(sample)时,JVM 会根据用于调用该方法的对象调用相应的方法。

示例

class Super{
   public static void sample(){
      System.out.println("超类的方法");
   }
}
public class OverridingExample extends Super {
   public static void sample(){
      System.out.println("子类的方法");
   }
   public static void main(String args[]){
      Super obj1 = (Super) new OverridingExample();
      OverridingExample obj2 = new OverridingExample();
      obj1.sample();
      obj2.sample();
   }
}

输出

超类的方法
子类的方法

覆盖静态方法

当超类和子类包含相同的方法(包括参数)并且它们是静态的时。超类中的方法将被子类中的方法隐藏

这种机制简称为方法隐藏,尽管超类和子类具有相同签名的方法(如果它们是静态的),但它不被视为覆盖。

覆盖主方法

您无法覆盖静态方法,并且由于public static void main()方法是静态的,因此我们无法覆盖它。

示例

class Super{
   public static void main(String args[]) {
      System.out.println("这是超类的主要方法");
   }
}
class Sub extends Super{
   public static void main(String args[]) {
      System.out.println("这是子类的主要方法");
   }
}
public class MainOverridingExample{
   public static void main(String args[]) {
      MainOverridingExample obj = new MainOverridingExample();
      Super.main(args);
      Sub.main(args);
   }
}

输出

这是超类的主要方法
这是子类的主要方法

相关文章