繁体   English   中英

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

[英]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子句; 否则,发生编译时错误。

你没有压倒它,你隐藏

http://faq.javaranch.com/java/OverridingVsHiding

你有什么例外?

Q1:不会覆盖静态方法,因此这两种方法具有相同的签名。 一个用Parent.test()调用,另一个用Redefine.test()调用

Q2:你的方法似乎有效。 你得到什么错误?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM