子類可以直接賦值給父類,但

2021-09-24 14:02:01 字數 1136 閱讀 9044

子類可以賦值給父類,但是只能用父類有的公有方法和屬性。

呼叫公有方法時,如果子類重寫了方法則使用子類重寫的方法,如果沒有重寫就使用父類的方法。

呼叫公有屬性時,當子類和父類都有相同屬性時,用的是父類屬性。

注意,賦值只是賦值給引用具有父類方法和公有屬性的變數而已,記憶體裡還是指向子類的物件,儲存的是子類的物件,比如例子裡用equals進行測試的部分,還是相等的,說明儲存不變只是訪問的口變了。如果再次賦值回來子類型別的變數還是會是原來的子類一點不變。因為儲存在堆中的物件還是子類的物件,這個可以自行驗證。這個就發現乙個偉大父類object,所有類的父類,也就是萬能的,所有類都可以賦值給乙個object的引用變數而不會報錯……

public

class

student

else}}

class

parent

public

void

getage()

public

void

getheight()

public

void

getmm()

}class

child

extends

parent

public

void

getage()

public

void

getmm()

}

執行

5

1702

9170

9equal

process finished with exit code 0

感想

這種機制可能不是是為了更好的抽象解耦誕生的,但至少在抽象解耦上面很有用,怎麼說,來個例子

複雜的大自然複雜的認類社會,無奇不有,比如汽車就有好多種車,但是用車的人可能只是需要抽象出汽車有上車,開車,下車的功能,所以抽象出car的介面有上車,開車,下車函式,然後實現類其他人去實現,用的時候只需要把實現類的賦值給介面類既可以用相應的方法,在用car的地方基本可以不用,也不用關心是哪個類實現了car介面,即實現和使用通過介面進一步解耦。在spring框架裡面經常使用這樣的方式進行解耦。太美妙了。

型別相容 子類的物件可以給父類指標賦值

乙個公有派生類的物件在使用上可以被當做基類的物件,反之禁止。也就是說 1.派生類的物件可以賦值給基類的物件 如b public a a a b b a b 語法上是允許的 2 派生類的物件可以初始化基類的引用 void f a a int main 3 指向基類的指標可以指向派生類 a p p ne...

測試子類物件賦值給父類的引用

public class testget public void b public class testget2 extends testget public static void main string args 列印結果是bbb 修改下 public class testget public ...

C 子類物件直接賦值給父類物件可行,反過來不行

1 子類物件中既包含父類中繼承來的變數,還包括自身所特有的.當把子類物件去賦值給父類物件時,把兩者共有的部分進行了賦值.有篇文章反映了兩者的記憶體關係 2 反之,父類物件賦值給子類物件時,由於父類物件不能夠提供子類物件所特有的變數,因此會報錯.3 物件指標也有這樣的使用規則,子類指標可以直接賦值給父...