猿问

这就是静态多态性对 java 中变量的作用方式吗

我想确保我对静态多态性的理解是正确的


请看下面的代码


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,编译器查看 fx 并决定它意味着 ax)??


&如果是这样,这称为静态多态性或隐藏还是什么?


提前致谢


四季花海
浏览 78回答 1
1回答

慕姐8265434

多态性就像通过钥匙孔看对象。您看不到整个对象,而只看到它的一部分,它对应于您已将对象的引用分配给的变量类型。该对象可以被视为不同的“形状/形式” - 这取决于您正在查看的钥匙孔。但它仍然是计算机内存中的同一个对象。您可以看到的形式取决于您将对象分配给的变量类型。多态性是看到同一对象的多种形式。如果您有对象创建者-当您将此对象分配给 type 的变量时,new b()您会将其视为类代表。当您将它分配给 type 的变量时,您会把它看作一个类代表。但它仍然是同一个对象。并且......你可以在变量之间转换它:bbaaf = (a)ff;你会发现同一对象突然被视为a类的代表(包括x属于该类的字段的可见性a)。
随时随地看视频慕课网APP

相关分类

Java
我要回答