我想确保我对静态多态性的理解是正确的请看下面的代码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); }}输出是04发生这种情况是因为编译器查看引用的声明类型并据此确定在编译时打印哪个 x 吗?(f 被声明为类型 a,编译器查看 fx 并决定它意味着 ax)??&如果是这样,这称为静态多态性或隐藏还是什么?提前致谢
1 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
多态性就像通过钥匙孔看对象。您看不到整个对象,而只看到它的一部分,它对应于您已将对象的引用分配给的变量类型。
该对象可以被视为不同的“形状/形式” - 这取决于您正在查看的钥匙孔。但它仍然是计算机内存中的同一个对象。您可以看到的形式取决于您将对象分配给的变量类型。
多态性是看到同一对象的多种形式。
如果您有对象创建者-当您将此对象分配给 type 的变量时,new b()
您会将其视为类代表。当您将它分配给 type 的变量时,您会把它看作一个类代表。但它仍然是同一个对象。并且......你可以在变量之间转换它:b
b
a
a
f = (a)ff;
你会发现同一对象突然被视为a
类的代表(包括x
属于该类的字段的可见性a
)。
添加回答
举报
0/150
提交
取消