我们可以在java的main()类中使用super关键字吗?

时间:2014-05-27 17:56:19

标签: java oop

我们可以在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?
  }
}

1 个答案:

答案 0 :(得分:0)

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

为什么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问候语,在创建对象实例后必须调用“假”方法,就像任何其他非静态方法一样。

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

非静态主方法会产生歧义,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的方法都会导致纯粹的混乱。另外,由于静态主方法,你可以有一个入口点,一个整个程序开始的地方,不能被一些糟糕的无参数构造函数遮蔽:)