關於父類引用指向子類物件

2022-03-26 22:32:47 字數 1386 閱讀 7826

很多人在初次接觸設計模式的時候,最大的疑惑莫過於碰到這樣的句子:(父類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...