Java:为什么我们不能覆盖一个让它变为静态的方法?

时间:2013-04-30 05:20:12

标签: java static

为什么我们不能覆盖非静态方法使其静态。我试图这样做时遇到了这个错误:

  

此静态方法无法从aSuperClass隐藏实例方法。

非常感谢!

2 个答案:

答案 0 :(得分:2)

覆盖意味着在子类中为实例方法提供新实现,Instance方法可能也可能不适用于类实例成员。覆盖它们并将它们重新定义为static是不合逻辑的。 static表示该方法与类相关,而不是与类的实例相关。

你不能用C#和Java做到这一点。

对于C#,请查看override - MSDN

  

您不能使用new,static或virtual修饰符来修改   覆盖方法。

答案 1 :(得分:1)

静态方法不会以多态性的方式被覆盖。但是,当您尝试覆盖静态方法时,Java允许使用名称隐藏的概念。

现在回答你的问题。可以通过类名和对象名调用静态方法。如果使用静态方法覆盖非静态方法,编译器将如何知道要调用哪个方法。

static void f(){}

A obj = new A();

A.f()obj.f()都会调用静态方法。如果您在此处放置非静态f(),则会obj.f()开始混淆。