当前位置: 首页 > 面试题库 >

Java为什么不允许覆盖静态方法?

夏飞跃
2023-03-14
问题内容

为什么无法覆盖静态方法?

如果可能,请使用示例


问题答案:

覆盖取决于拥有类的实例。多态性的重点是可以对一个类进行子类化,并且实现那些子类的对象对于在超类中定义的相同方法(在子类中被重写)将具有不同的行为。静态方法未与类的任何实例相关联,因此该概念不适用。

影响Java设计的因素有两个。一个是对性能的关注:Smalltalk批评它太慢(垃圾回收和多态调用是其中的一部分),Java的创建者决心避免这种情况。另一个决定是Java的目标受众是C 开发人员。使静态方法按其实际方式工作对C 程序员来说是很有益的,而且速度非常快,因为不需要等到运行时就确定要调用哪种方法。



 类似资料:
  • 问题内容: 在PHP 5.2中启用严格警告之后,我看到了一个项目中的大量严格标准警告,这些项目最初编写时没有严格警告: 严格标准 : 静态函数 Program :: getSelectSQL()在Program.class.inc中 不应抽象 有问题的函数属于抽象父类Program,并且被声明为抽象静态,因为它应该在其子类(例如TVProgram)中实现。 我确实在这里找到有关此更改的参考: 删除

  • 静态变量属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问; 非静态变量属于类的对象,只有在类的对象产生时,才会分配内存,通过类的实例去访问; 静态方法也属于类本身,但是此时没有类的实例,内存中没有非静态变量,所以无法调用。

  • 问题内容: 我很困惑为什么不允许以下内容: 我知道为什么接口中的方法不能是静态的,但是为什么覆盖方法不能是静态的? 我希望所有类都可以实现该方法,但目前仅限于如果已经实例化了该对象而无法调用该方法,则只能调用该方法… **_更新: _ 感谢您的回答,我现在对此有了更好的了解。基本上,我不应该尝试使实用程序类(或与此相关的工厂类)实现接口(或者至少不是这样)。 问题答案: 在Java中调用静态方法要

  • 我的A类是: 另一类B为: 如果我将类A的方法sayHello(int,int)的返回类型从int改为float,它会显示一个错误,因为根据覆盖规则,返回类型也被认为是无效的覆盖和重载。 我不明白为什么java不允许更改返回类型。为什么返回类型也需要相同

  • 我试图理解为什么我们不能覆盖静态和最终方法。我不明白背后的目的。

  • 问题内容: Java不允许覆盖静态方法,但是, 在这里没有覆盖吗? 问题答案: 这是“隐藏”,而不是“覆盖”。要看到这一点,请将方法更改为以下内容: 这应该打印: 如果正在进行真正的覆盖,那么您会看到: 通常认为使用实例类型来调用静态方法是一种不好的方式,就像您正在做的那样,因为很容易想到您正在调用实例方法,并且容易误以为重写正在发生。Java样式检查器/代码审核工具通常会将其标记为样式错误/潜在