gpt4 book ai didi

java - 为什么说Java中的静态方法不是虚方法呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:06 26 4
gpt4 key购买 nike

在面向对象范式中,函数或虚方法是一种函数或方法,其行为可以在继承类中被具有相同签名的函数覆盖以提供多态性行为


根据定义,Java 中的所有非静态方法默认都是虚方法,除了final 和私有(private)方法。不能继承多态行为的方法不是虚方法。


Java 中的抽象类只不过是相当于 C++ 的纯虚方法。


为什么说Java中的静态方法不是虚方法呢?即使我们可以覆盖静态方法,因此它可能会提供一些多态性的优势,而且 Java 中的静态方法主要可以使用它关联的类名来调用,但也可以使用Java 中它的关联类的对象,其方式与调用实例方法的方式相同。

最佳答案

不能覆盖静态方法。它们在编译时绑定(bind)。它们不是多态的。即使您尝试将它当作实例方法来调用(IMO 您不应该这样做),它也会绑定(bind)到该表达式的编译时类型,并且执行时值将被完全忽略(即使它为 null) :

Thread otherThread = null;
otherThread.sleep(1000); // No errors, equivalent to Thread.sleep(1000);

这种行为可能会让读者非常困惑,这就是为什么至少一些 IDE 允许您为“通过”引用访问静态成员生成警告或错误。这是 Java 设计中的一个缺陷,纯粹而简单 - 但它根本没有使静态方法成为虚拟的。

关于java - 为什么说Java中的静态方法不是虚方法呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8095457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com