一般来说,重写是在子类中重新定义成员含义的概念。为什么在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 - 为什么变量的行为与派生类中的方法不同?
为什么子类中不允许重写变量?
你输入了b
作为一个例子Base
。所以当编译器需要解析时b.a
,它看起来像的定义Base
的意义b.a
。实例字段不存在多态性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)