【发布时间】:2017-02-07 21:24:54
【问题描述】:
我在使用 java 中的覆盖功能时遇到了疑问。
考虑下面的代码:
class Vehicle {
static int speed = 50;
public static void display() {
System.out.println(speed);
}
}
class Jeep extends Vehicle {
int speed = 100;
void display() { //GETTING COMPILE TIME ERROR
System.out.println(speed);//will print speed of Bike
}
public static void main(String args[]) {
Jeep b = new Jeep ();
System.out.println(b.speed);
}
}
我读到静态方法不能被覆盖。
但在上面的代码中,我在父类 Vehicle 中声明了一个静态变量“速度”。我在子类中创建了一个同名“速度”的实例变量。当我更改子类中静态变量“速度”的值时,我没有收到任何编译时错误。
我在尝试覆盖显示方法时遇到编译时问题,而在重新声明变量“速度”时我没有收到任何错误,即使两者在父类中都是静态的。
可能是什么原因,子类的speed 变量隐藏了父类的静态speed 变量,而display 方法却没有这样做并显示编译时错误?
【问题讨论】:
-
你在问什么?实例字段或方法?
speed还是display? (这很重要。) -
您没有更改子类中的静态变量
speed的任何内容? -
字段永远不能被覆盖,不管是不是静态的,所以字段没有问题。
标签: java oop inheritance static overriding