静态方法继承和多态

use*_*135 2 java polymorphism inheritance static-methods

继承和多态如何与静态方法一起使用?有人可以解释一下这里应该是什么样的输出以及它是如何导出的?

class A { public static int get() { return 17; } }
class B extends A { public static int get() { return 42; } }


 Main
 A x = new B();
 x.get();
Run Code Online (Sandbox Code Playgroud)

错误消息,

应该以静态方式访问类型A的静态方法get()

我想我知道如何以静态方式访问它,但这是一个来自类的问题,它暗示将返回一个或另一个值

在我们的程序中,我们有类定义:

class A { public static int get() { return 17; } }
class B extends A { public static int get() { return 42; } }
Run Code Online (Sandbox Code Playgroud)

以及我们宣布的其他地方 A x = new B();

电话会x.get()回来几号?

Sot*_*lis 5

调用将返回int17.

static 方法不是继承的.

static 方法是根据调用它们的表达式的类型绑定和调用的.

所以

x.get();
Run Code Online (Sandbox Code Playgroud)

x类型A调用A的实现在哪里.另请注意,static方法不需要调用实例.

这些也可以.

((A) null).get();
A.get();
...
public static A someMethod() {}
...
someMethod().get();
Run Code Online (Sandbox Code Playgroud)

您收到的消息是警告,而不是错误.