我们可以在 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); } }
输出
这是超类的主要方法 这是子类的主要方法