[英]Redefining static method in child class
我想知道为什么在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{
}
}
A1 :: static
方法是每个类。 它们与多态性方面的继承层次结构无关。 所以调用Parent.test()
将调用父方法,而调用Redefine.test()
将调用子方法。
A2: JLS 8.4.8写道:
如果一个类声明了静态方法m,则声明m被称为隐藏任何方法m',其中m的签名是m'签名的子签名(第8.4.2节),在超类和超接口中。该类中的代码可以访问的类。
方法声明不得具有与它覆盖或隐藏的任何方法冲突(第8.4.6节)的throws子句; 否则,发生编译时错误。
Q1:不会覆盖静态方法,因此这两种方法具有相同的签名。 一个用Parent.test()调用,另一个用Redefine.test()调用
Q2:你的方法似乎有效。 你得到什么错误?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.