【发布时间】:2015-12-30 07:16:34
【问题描述】:
为什么我们不能在子类 B 中声明与父类 A 中的静态方法具有相同签名的实例方法?
如果我尝试这样做,它会引发编译时错误。
我的问题是,既然父类的静态方法仅限于父类,为什么子类的实例方法不能编译。
让我们看代码:
`
public class A{
static void testStatic(){}
}
public class B extends A{
void testStatic (){}
}
public class Test{
public static void main (String[] args){
A a = new B()
a.testStatic();
}
`
在上面的代码中,由于 A 没有该名称的实例方法,并且由于 Java 允许对象访问静态方法,指向 'B' 的类型为 'A' 的对象 a 可以调用存在于它(A级)。但是编译器抛出错误“实例方法无法覆盖静态方法”为什么?
注意:如果一个类不允许两个方法使用相同的方法名,我可以理解,即使一个是实例,另一个是静态的。但我不明白为什么它不允许子类有一个同名的实例。特别是考虑到静态方法不能被覆盖的事实。而Java允许子类与父类静态方法同名,称为信息隐藏,但不能覆盖。
【问题讨论】:
-
@Bilbo Baggins 更新
标签: java inheritance static