java - 静态方法继承和多态

标签 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();

错误消息,

The static method get() from the type A should be accessed in a static way

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

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

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

在其他地方我们声明A x = new B();

调用x.get()会返回什么数字?

最佳答案

调用将返回 int17

静态方法不被继承。

静态方法根据调用它们的表达式的类型进行绑定(bind)和调用。

所以

x.get();

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

这些也可以。

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

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

关于java - 静态方法继承和多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23002754/

相关文章:

java - Shiro 当前的主题是什么?

java - 调用start方法时,是否需要在java的run方法中同步方法?

java - 在服务器上部署 Java SE6 独立 Web 服务

sql - 查询某行继承自的父表时获取该行的源表名称

java - 为什么接口(interface)类型在重载方面被认为是完全不同的?

c++ - 问题向下转换到子类,多态性不起作用

java - 我如何为这个 JAVA 项目构造我的 Tester 类?

Javascript 继承问题

c++ - 在派生类中声明为 Virtual 的函数不执行,而是给出编译错误,为什么?

java - 为什么字段从父类打印,而方法从子类打印(Java)