class A {
int i = 1;
int f() { return i; }
}
class B extends A {
int i = 2;
int @Override f() { return -i; }
}
public class override_test {
public static void main(String args[]) {
B b = new B();
A a = (A) b; // Cast b to an instance of class A.
System.out.println(a.i); // Now refers to A.i; prints 1;
System.out.println(a.f()); // Still refers to B.f(); prints -2;
}
}
我想知道为什么 a.f() 仍然引用 B.f() 而 a.i 引用 A.i。
提前致谢!
In java 字段不是多态的这就是为什么a.i
指的是A.i
While a.f()
指的是B.f()
因为b
是一个对象obB
,尽管您将其投射到A
这意味着您将只能使用在中声明的那些方法A
.
但该对象仍然是类型B
.
因此,当您访问字段时,它基于引用类型,而当您访问方法时,它基于对象类型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)