这就是静态多态如何在java中为变量工作的

时间:2019-07-26 19:16:25

标签: java polymorphism

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

请看下面的代码

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)?

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

预先感谢

1 个答案:

答案 0 :(得分:0)

多态性就像通过钥匙孔在物体上看一样。您看不到整个对象,而只看到它的一部分,该部分与您已为其分配对对象的引用的变量类型相对应。

该对象可以看作是不同的“形状/形式”-它取决于您正在寻找的关键孔。但是它仍然是计算机内存中的同一对象。您可以看到的形式取决于将对象分配给的变量的类型。

多态性是看到同一物体的多种形式。

如果您有一个由new b()创建的对象-当您将该对象分配给类型为b的变量时,它将作为b类的代表。当您将其分配给类型为a的变量时,它将作为a类的代表。 但这仍然是同一对象。而且...您可以在变量之间进行强制转换:

f = (a)ff;

,您会突然发现同一对象被视为a类的代表(包括属于x类的a字段的可见性。)