mav*_*vis 4 java inheritance overriding
通常,Overriding是重新定义子类中成员含义的概念.为什么变量在重写时不像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);
}
}
Run Code Online (Sandbox Code Playgroud)
由于数据成员a
是指定的包访问,因此Derived
该类也可以使用它.但通常在使用基类引用调用重写方法时,会调用派生类中重新定义的方法(动态方法调度)..但对于变量..why,它是不一样的.
预期输出
内部派生:
a = 99
获得的输出:
内部衍生:
a = 10
打印10 - 为什么变量的行为与派生类中的方法不相似?
为什么不允许在子类中重写变量?