静态方法继承和多态

时间:2014-04-11 03:03:36

标签: java inheritance polymorphism 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();

错误消息

  

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

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

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

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

以及我们声明A x = new B();

的其他地方

电话x.get()会返回什么号码?

1 个答案:

答案 0 :(得分:5)

调用将返回int17

static方法不会被继承。

static方法基于它们被调用的表达式的类型进行绑定和调用。

所以

x.get();

其中x类型为A,会调用A的实现。另请注意,static方法不需要调用实例。

这些也可以。

((A) null).get();
A.get();
...
public static A someMethod() {}
...
someMethod().get();

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