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

时间:2010-07-15 12:25:32

标签: java inheritance static scjp

我想知道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{

    }
}

3 个答案:

答案 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)

你没有覆盖它,你隐藏

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

你有什么例外吗?

答案 2 :(得分:0)

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

调用

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