多態成員屬性心得

父類 子類成員變量關係:


若是子類的引用調用 父類有但是子類沒有 成員變量時候

子類其實調用的是父類的成員變量, 但是也是屬於子類的屬性(特性),該屬性受父類的變化影響


子類在new的時候產生了一個父類對象 在內存中,


class Animal {

protected String name= "mimi";

public  String getName() {return name;}

}


class Cat extends Animal{

String name;

Cat(String name) {

this.name = name;

}

}


public class Test3 {

public static void main(String[] args) {

Cat c1 =  new Cat("pipi");

System.out.println(c1.getName()); // 返回“mimi”

System.out.println(c1.name);     //  返回“pipi”

Animal c2 = (Animal)c1;

System.out.println(c2.name);     //  返回“mimi”

}

}


因爲,有繼承關係的兩個類是這樣的,最終new出來的子類的對象的內部會有一個父類對象,在這裏也就是說,這Cat對象的內部包含有一個Animal對象,而且Cat類中並沒有定義getName()方法,換句話說就是沒有重寫父類Animal的getName()方法,所以c1.getName(),表面上看,我們總是說此方法是繼承下來的

,所以在Cat類中沒有定義,但是可以使用,這只是表面上這麼理解,實際上內存中是什麼樣?就是我上面說的那樣,Cat對象的內部還有一個Animal對象,所以c1.getName()的時候,實際上是調用的它裏面的那個父類Animal對象的getName()方法,而Animal類中定義的getName()是return name;注意,return的這個name指的是自己Animal的name,對吧,所以打印出mimi


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章