很多人在初次接觸設計模式的時候,最大的疑惑莫過於碰到這樣的句子:(父類animal和子類dog)
animal a2
=new
dog();
這是什麼玩意兒?究竟有什麼用途,我直接用子類物件不就完了?
我們就來解釋一下:
--這是什麼玩意兒?
re:這種用法叫做「父類引用指向子類物件」(跟繞口令似的),或者叫「父類指標指向子類物件」,指的是定義乙個父類的引用,而它實際指向的是子類建立的物件。功能上相當於子類的「向上轉型」,或者「上溯物件」,
上面的語句也可以寫成:
animal a2
=new
animal();
dog dog
=new
dog();
a2 =
dog;
將子類物件賦給父類的引用就是向上轉型,animal a2 = new dog();中的new dog()就是例項化乙個沒有名字的物件,然後轉型給父類的引用a2,僅此而已。
--究竟有什麼用途?
re:一般來說,乙個物件例項建立完就定死了,比如dog,如果程式裡的變數寫dog的話,萬一以後發生變化就要改**了。那麼事先就不寫死dog,而是寫父類animal,那麼以後用到animal的地方,用dog例項,cat例項都可以取代,不用改例項名了。說玄乎一點,也就體現了物件導向「多型」的特性。
下面看乙個很簡單的例子,就更加明白了:
class
animal
, animal always has legs
",type);}}
class
dog : animal
, dog has four legs
", type);}}
class
glede : animal
, glede has two legs
",type);}}
class
test
}結果:
this
isan animal , animal always has legs
this
isa dog , dog has four legs
this
isa glede , glede has two legs
真正明白了這些,也就該接觸設計模式領域了。
最後嘮叨兩句:
·因為a2,a3都是子類的物件,所以呼叫起來,也都是呼叫的子類的方法(當然前提是它們都override了父類方法,諸位可以試著把兩個子類中的override替換成new,結果就完全不一樣),有人把這叫做「關注物件原則」。
·向上轉型是一定沒有錯的,就好比你說「狗是動物」是成立的,反之,向下轉型就要注意了,你不能說「動物是狗」。
也不知道說明白沒有,先下了。。。
關於父類引用指向子類物件
例如 有以下2個類 public class father public class son father father f new son 這種用法叫做 父類引用指向子類物件,或者叫 父類指標指向子類物件 指的是定義乙個父類的引用,而它實際指向的是子類建立的物件。好處是什麼?下面做幾個測試,第一種...
關於父類引用指向子類物件
父類的引用指向子類的物件 當子類繼承的父類時子類會繼承父類的屬性以及方法,當用父類去接收子類物件時 1.如果子類中含有與父類同名屬性時,雖然物件中存在子類中的資料,但是無法去呼叫,可以通過在子類中重寫get,set方法去獲取資料。2.如果子類中沒有重寫父類的方法時,無法用物件去呼叫子類的屬性以及方法...
父類引用指向子類物件
要理解多型性,首先要知道什麼是 向上轉型 我定義了乙個子類cat,它繼承了animal類,那麼後者就是前者是父類。我可以通過 cat c new cat 例項化乙個cat的物件,這個不難理解。但當我這樣定義時 animal a new cat 這代表什麼意思呢?很簡單,它表示我定義了乙個animal...