2012-01-31 75 views
13

我们能覆盖的方法如下所述: -覆盖主要方法

public static void main

+1

你能给的,当你想做到这一点的例子,为什么? – 2012-01-31 17:38:03

回答

15

main是一个静态方法,因此是不是多态。您可以隐藏它是在子类中定义另一个静态main方法,虽然。

1

不可以。您不能覆盖静态方法。

无论如何这不会有意义。由于您不需要该类的实例,因此不需要多态行为。你只需要将全部从SomeParent.main()更改为SomeChild.main()

0

MAIN是一种类方法(因为它的定义为static)。因此,“覆盖”它(或者对于任何静态方法而言)是没有意义的。

“覆盖”的概念仅用于实例方法。

This对于相同的阅读是一个很好的阅读。

0

不,不可能重写静态方法,因为它们不是实例级方法,而是类级方法。

3

不,你在这里失去了重点。主要方法有一个目的,并为此唯一目的进行逻辑声明:

Java中的主要方法属于一个类,但不属于对象。对象创建在Java中的main()是应用程序的起点,无法从特定于实例的方法启动应用程序。这就是为什么静态关键字与主要方法完美结合的原因。其实主要方法声明的所有部分做出完美的感觉,当你觉得像“JVM”和画面的主要方法做什么(启动应用程序):

  • public,因为这种方法必须由可访问jvm(不是由你写的)。这意味着这个方法可以在没有对象的情况下被访问(因为它的表示从不改变),但是如果你再次像jvm一样思考,这里的逻辑很容易被理解; “我没有任何对象来创建(实例化)对象,所以我需要一个静态方法来启动应用程序,因为简单没有任何合理的方法来获取特定于实例的方法,因为我没有任何东西尚未创造物体“。
  • void此方法无法在逻辑上返回任何内容,因为没有任何内容尚未返回任何内容。这是应用程序的起点。 主要我是主要的方法,因为没有我你不会有一个应用程序。
  • String[] args给我发送的数据你可能会觉得我有用的启动。
3

我们不能重写静态方法,因为静态方法是一个类方法,并且这个方法的范围在同一个类本身内。所以如果你想强行重写,那么你必须在该类范围之外定义它,这是没有意义的。

-1

这个我试过,不知道它的正确的方式来覆盖的方法,但我能够覆盖这样的主要方法,

class MainOverride { 

    public static void main(String[] args) { 

     MainOverridden mo = new MainOverridden(); 

     String [] s = {"a","b"}; 
     mo.main(s); 


    } 

} 

class MainOverridden extends MainOverride { 

    public static void main(String[] args) { 

     System.out.println("Main overridden"); 

    } 

} 
+2

您无法重写静态方法。你刚才隐藏了主要方法MainOverride类。 – 2017-04-22 18:52:17

+0

他甚至没有隐藏它。仍然可以像以前一样运行'MainOverride'作为应用程序。如果你没有告诉它运行该子类,它有一个子类的事实是无关紧要的。 – 2017-04-22 19:31:49

+0

谢谢您的评论,我从中得到的结论是,我遵循重写的方式并不实际有效,但请您可以庆祝更多 - 因为我是新来的java :) – 2017-04-24 08:32:51