为什么我们不能覆盖非静态方法使其静态。我试图这样做时遇到了这个错误:
此静态方法无法从aSuperClass隐藏实例方法。
非常感谢!
答案 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()
开始混淆。