一般来说,重写是在子类中重新定义成员的含义的概念。为什么在java中重写时变量的行为不像方法?
例如:
class Base {
int a = 10;
void display() {
System.out.println("Inside Base :");
}
}
class Derived extends Base {
int a = 99;
@Override
// method overriding
void display() {
System.out.println("Inside Derived :");
}
}
public class NewClass {
public static void main(String... a) {
Derived d = new Derived();
Base b = d;
b.display(); // Dynamic method dispatch
System.out.println("a=" + b.a);
}
}
由于数据成员a
是指定的包访问权限,因此它也可用于Derived
类。但是一般在使用基类引用调用被覆盖的方法时,在派生类中重新定义的方法被调用(动态方法分派)..但是变量不一样..为什么。
预期输出
内部派生:
a=99
获得的输出:
内部派生:
a=10
打印 10 - 为什么变量的行为与派生类中的方法不同?
为什么不允许在子类中覆盖变量?