我想知道Java首次被允许的原因(或者一般的oops) 我记得静态方法对于父类和子类都是通用的
public class Redefine extends Parent{
public static void test () {
}
}
class Parent{
public static void test () {
}
}
Q1:由于静态方法不支持Overriding,两个classe如何包含相同的方法?
Q2:如果在static中更改方法以抛出未定义的异常,则不进行编译。 为什么会这样。它显然不是压倒一切所以我应该被允许抛出新的例外吗?
public class Redefine extends Parent{
public static void test () throws Exception{
}
}
答案 0 :(得分:10)
A1::static
方法是每班级。它们与多态性方面的继承层次结构无关。因此,调用Parent.test()
将调用父方法,而调用Redefine.test()
将调用该子进程。
A2: JLS 8.4.8写道:
如果一个类声明了静态方法m,那么声明m被称为隐藏任何方法m',其中m的签名是m'的签名的子签名(第8.4.2节),在超类中类的超接口,否则可以访问类中的代码。
方法声明不得具有与其覆盖或隐藏的任何方法冲突(第8.4.6节)的throws子句;否则,发生编译时错误。
答案 1 :(得分:4)
你没有覆盖它,你隐藏它
你有什么例外吗?答案 2 :(得分:0)
Q1:静态方法没有被覆盖,因此这两种方法具有相同的签名。一个用Parent.test()调用,另一个用Redefine.test()
调用Q2:您的方法似乎有效。你得到什么错误?