【问题标题】:can we use super keyword within the main() class in java? [duplicate]我们可以在 java 的 main() 类中使用 super 关键字吗? [复制]
【发布时间】:2023-03-28 19:38:01
【问题描述】:

我们可以在java的主类中使用super关键字吗?如果我们在 main 方法中使用 super 会怎样。有没有可能?

class A {
  int a = 5;
}

class B extends A {
  int b = a;

  void method(){
    System.out.println(a+b);
  }
}

class MAIN {
  public static void main(String[] args){
    B obj = new B();
    obj.method();
    // what happens now?
  }
}

【问题讨论】:

  • 您希望在 main 方法中调用 super 来完成什么?
  • 不是重复的。
  • @Niemand 如果不是重复的,请扩展您的要求。目前,尚不清楚您为什么要在 main 方法中使用 super,以及您期望这样的操作会产生什么结果。
  • @dimo414 这不是我问的,这只是一个在寻找我们认为理所当然的解释的朋友:P

标签: java oop


【解决方案1】:

不行,我们不能。 Main 方法是一个静态方法,因此它属于该类,而不是该类的实例(对象)。这里已经给出了很好的解释-calling a super method from a static method

为什么 main 方法必须是静态的?

因为非静态 main 方法将被解释为另一个名为“main”的“临时”方法。您的程序甚至无法编译,因为它无法找到静态 main 方法。写这样的东西是完全合法的:

public class Demo {

    public void main() {
        System.out.println("Hello, this is the FAKE main body method");
    }

    public static void main(String [] args) {
        System.out.println("Hello, this is the REAL main body method");
    }
}

编译上述代码后,你会得到:

"Hello, this is the REAL main body method"

不打印 FAKE 问候语,“fake”方法必须在创建对象实例后调用,就像任何其他非静态方法一样。

为什么不能解释为静态主方法?

非静态 main 方法会产生歧义,JVM 不知道如何创建包含它的对象。看这个例子:

public class Dinosaur {
    public Dinosaur() {
        System.out.println("Hi, I have just created a dinosaur!");
    }
    public void main() {
        System.out.println("Hello, this is the main body method");
    }
}

它应该调用无参数构造函数吗?还是应该跳过它并从 main 方法运行代码而不构造此对象?运行这个类首先应该打印什么 - 创造一个恐龙或欢迎你进入 main 的主体?或者也许只是执行主要而不创建对象?这里有很多选择。

如您所见,由于这种类型的不便,将每个名为 main 的方法解释为 THE main 会导致纯粹的混乱。此外,由于静态 main 方法,您可以有一个入口点,这是整个程序开始的地方,并且不能被一些糟糕的无参数构造函数遮蔽:)

【讨论】:

  • 如果main方法不是静态的怎么办?
  • 如果 main() 不是静态的,那么它就真的不像一个 main 方法。
  • 主方法必须是静态的,否则它就不是主方法,只是一些名为“主”的普通方法。非静态 main 方法会模棱两可,JVM 不知道如何创建包含它的对象。
  • 请注意,创建一个名为main 的非静态方法并没有什么“错误”,但是JVM 在寻找程序的入口点时根本不会考虑它。但是,这样做会造成不必要的混乱。
  • @Niemand -您的回答没有解释对主要部分的回答,对于您的信息,我的回答在第二部分的解释方面也类似于您的回答。从观众的角度来看,两者都是同义词,实用。相反,如果我有幸这样做,我会否决您的回答。您的回答没有为问卷提供合理和完整的信息!!!
猜你喜欢
  • 2022-12-09
  • 2014-01-29
  • 2011-06-09
  • 2011-07-14
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
相关资源
最近更新 更多