大家都知道子類繼承父類是類型的繼承,包括屬性和方法!如果子類和父類中的方法簽名相同就叫覆蓋!如果子類和父類的屬性相同,父類就會隱藏自己的屬性!
但是如果我用父類和子類所創建的引用指向子類所創建的對象,父類引用所調用子類對象中的屬性值或方法的結果是什么呢?
看代碼:
public class FieldDemo { public static void main(String[] args){ Student t = new Student("Jack"); Person p = t;//父類創建的引用指向子類所創建的對象 System.out.println(t.name+","+p.name); System.out.println(t.getName()+","+p.getName()); } } class Person{ String name; int age; public String getName(){ return this.name; } } class Student extends Person{ String name; // 屬性和父類屬性名相同,但在做開發時一般不會和父類屬性名相同!! public Student(String name){ this.name = name; super.name = "Rose"; // 為父類中的屬性賦值 } public String getName(){ return this.name; } }
返回結果是:Jack,Rose
Jack,Jack
原因是:在Java中,屬性綁定到類型,方法綁定到對象!
內存圖如下: