以下代码无法编译:
public class Child extends Parent{
void foo() {
}
}
class Parent{
public static void foo(){}
}
为什么我不能在子类中声明非静态方法?在这种情况下不允许覆盖,因为该方法是静态的,那么为什么编译器不允许我们声明实例方法呢?
答案 0 :(得分:1)
因为孩子从父母和他们自己识别foo()。因此,您无法使用当前代码创建。但是,您可以在您的孩子中声明新的foo(),如下所示:
![Alt Text](url)
此处有更多详细信息:您可以在子类中编写一个新的静态方法,该方法与超类中的签名具有相同的签名,从而隐藏它。 http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html