我想确保我对静态多态性的理解正确
请看下面的代码
class a {
int x=0;
}
class b extends a {
int x=4;
}
public class main4 {
public static void main(String[] args) {
a f = new b();
System.out.println(f.x);
b ff = new b();
System.out.println(ff.x);
}
}
输出为
0
4
之所以会这样,是因为编译器会查看引用的声明类型,并确定在编译时要打印哪个x?
(f被声明为类型a,编译器查看f.x并确定它意味着a.x)?
&如果是,这称为静态多态或隐藏还是??
预先感谢
答案 0 :(得分:0)
多态性就像通过钥匙孔在物体上看一样。您看不到整个对象,而只看到它的一部分,该部分与您已为其分配对对象的引用的变量类型相对应。
该对象可以看作是不同的“形状/形式”-它取决于您正在寻找的关键孔。但是它仍然是计算机内存中的同一对象。您可以看到的形式取决于将对象分配给的变量的类型。
多态性是看到同一物体的多种形式。
如果您有一个由new b()
创建的对象-当您将该对象分配给类型为b
的变量时,它将作为b
类的代表。当您将其分配给类型为a
的变量时,它将作为a
类的代表。
但这仍然是同一对象。而且...您可以在变量之间进行强制转换:
f = (a)ff;
,您会突然发现同一对象被视为a
类的代表(包括属于x
类的a
字段的可见性。)