close

 

子與父類別的轉型差別就在 當子類別轉父類別時會自動轉型。

首先,先產生Ostrich的物件實體。

接著印出 animal.getKind() 和 animal.getLegs() 。

在順利印出資料後,會執行下一行 animal.move();

animal.move() 執行時,因為在第七行時,我們就先產生了一個物件位置。

所以當執行到animal.move()時,電腦就會自動去讀取子類別  Ostrich。

並且執行class Ostrich中 move()的這函式,當然在那裡我們只是單純印出我們所賦予給他的動作。

 

 

接下來,在12行我們用一種奇怪的方式來抓值。

看到這有人就會問說,為什麼不直接學抓move()的這種方式 輸入 animal.hideHead()  ?

 

 

當我試著輸入這行時,編釋時發現,電腦並不能很順利的編釋完成,並且會產生錯誤。

錯誤中指出,他在class Animal的程式碼中,找不到hideHead() 這個函式。

而hideHead() 這個動作是在Animal類別的子類別Ostrich中我們才有定義。

所以我們就必需強迫電腦再往更深一層去找hideHead()。

而這個動作就是強迫轉型。

 


程式碼主要運算的地方就在Animal類別之中。

算是這一整個完整的程式的核心所在。

在我看來,這個地方有點像是一個交通的行控中心,裡頭的程式碼會執行初步運算。

而Zoo裡的程式碼就是主要的程式的進入點。

是否執行其他類別的函式,都要看Zoo的程式碼中是否有叫用而定。

 


 

我們分別在 Animal類別 與 Bird類別之中,各別賦予了該種動物的行動方式。

但是Animal裡泛指各式各類的動物,所以動作與吃的方式,定義的也比較粗略。

所以在Bird類別之中,鳥繼承(extends)了動物類別。只是要更細分動物與鳥的不同罷了。

在這裡繼承有別的功能,而主要為了就是做到程式碼的精簡。

當我們叫用到 setLegs 與 setKind 這兩個方法時,電腦就會自動的從動物類別(class Animal)中去判斷辨別。

 


這邊要在補充一下程式碼。

pulic void move(){System.out.println("鴕鳥健步如飛");}

pulic void hideHead(){System.out.println("鴕鳥把鳥頭藏起來了");}

當我們在執行Zoo時,程式之中使用的animal.getLegs與animal.getKind,值就會在這邊取得。

當執行至 animal.move()時,然後印出「鴕鳥健步如飛」字樣。

12行同上。

 


在這裡,我發現一些有趣的事情。

過去自已有一段時間為了準備考SCJP,也有努力K過書。

但看的東西往往感覺比較表層,所以也開始會因為不了解而感到無趣。

雖說是重拾程式書,但動真格的說起來,我也只是一個初學者而已。

當發現程式之間相互叫用時,突然覺得這東西真有趣。

一邊看書一邊key in程式碼時,一直都會萌生一種「原來是這樣」的想法。

就像是現在的強迫轉型也是。

原來animal.hideHead() 不能這樣使用阿。 原來要用((Ostrich).animal).hideHead();這樣的方式才行。

說到這,不禁讓自已想到不久之前看電視上看到 一部電影。

裡頭的一個人說道「寫程式是一門藝術」。

突然覺得,寫程式真的是一門藝術阿。

arrow
arrow
    全站熱搜

    JewelABBA 發表在 痞客邦 留言(0) 人氣()