gpt4 book ai didi

java - 在子类中重新定义静态方法

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

我想知道为什么这首先在 Java 中被允许(或者通常是 oops) 我记得静态方法对于父类和子类都是通用的

public class Redefine extends Parent{
public static void test () {

}
}


class Parent{
public static void test () {

}
}

Q1:既然静态方法不支持重写,那么两个类如何包含相同的方法?

Q2 : 如果将静态方法更改为抛出未定义的异常,则无法编译。 为什么会这样。它显然不是压倒一切的,所以我应该被允许抛出新的异常,对吧?

public class Redefine extends Parent{
public static void test () throws Exception{

}
}

最佳答案

A1:: static 方法是针对每个类的。它们与多态性方面的继承层次结构无关。所以调用Parent.test()会调用父方法,而调用Redefine.test()会调用子方法。

A2: JLS 8.4.8写道:

If a class declares a static method m, then the declaration m is said to hide any method m', where the signature of m is a subsignature (§8.4.2) of the signature of m', in the superclasses and superinterfaces of the class that would otherwise be accessible to code in the class.

A method declaration must not have a throws clause that conflicts (§8.4.6) with that of any method that it overrides or hides; otherwise, a compile-time error occurs.

关于java - 在子类中重新定义静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255464/

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