Java 继承静态方法
编辑:没关系,我想出来了。由于该方法是静态的,因此它只查看变量的编译时类型,而实例化它并没有什么区别。Java 继承静态方法,java,Java,编辑:没关系,我想出来了。由于该方法是静态的,因此它只查看变量的编译时类型,而实例化它并没有什么区别。 class Parent { void sayIt() { System.out.println("Miss "); } } class Child extends Parent { static void sayIt() { System.out.println("Hit "); } public static void
class Parent {
void sayIt() {
System.out.println("Miss ");
}
}
class Child extends Parent {
static void sayIt() {
System.out.println("Hit ");
}
public static void main(String args[]) {
Parent papa = new Parent();
papa.sayIt();
Child kid = new Child();
kid.sayIt();
papa = kid;
papa.sayIt();
kid = (Child)papa;
kid.sayIt();
}
}
这张打印的是“未命中”。我知道怎么做。但是如果我将sayIt()
方法更改为static:
class Parent {
static void sayIt() {
System.out.println("Miss ");
}
}
class Child extends Parent {
static void sayIt() {
System.out.println("Hit ");
}
public static void main(String args[]) {
Parent papa = new Parent();
papa.sayIt();
Child kid = new Child();
kid.sayIt();
papa = kid;
papa.sayIt();
kid = (Child)papa;
kid.sayIt();
}
现在它会打印“命中未命中”
我不明白为什么会发生这种事。有什么线索吗?首先,问题不应该是继承静态方法。继承不适用于静态方法 您不必为访问静态方法创建实例 使用
Parent.sayIt()
-访问用Parent.java编写的静态方法
使用
Child.sayIt()
-访问用Child.java编写的静态方法静态方法取决于引用类型而不是对象类型<代码>爸爸说它()始终打印Miss
,因为编译器将用Parent.sayIt()替换它代码>。关于第一种情况,实际上是隐藏父方法,而不是覆盖它
请参阅:Parent papa=new Parent()代码>--表示父类,您有静态方法。当您尝试对引用调用静态方法时,它不会查看它所持有的对象
检查这里,添加这两行并测试它
Parent p = null;
p.sayIt();
你看不到NPE,它调用你的静态方法。静态方法属于类,而不是实例。它们不会在派生类中继承。您无法继承静态方法,如果添加@Override
符号,则会出现编译错误。