OOP: 理解類和物件(2) (轉)

worldblog發表於2007-12-09
OOP: 理解類和物件(2) (轉)[@more@]: 理解類和(2)

[ 作者: 不詳   新增時間: 2001-9-7 8:10:45 ]


{
   public boolean isAMammal()
   {
       return(false);
   }

   public boolean isCarnivorous()
   {
       return(false);
   }

   public String getHello()
   {
       return("Quack");
   }
}

在編譯並執行我們的以後,輸出應該如下:
A dog says Bark, is carnivorous: true, is a mammal: true
A cat says Meow, is carnivorous: true, is a mammal: true
A duck says Quack, is carnivorous: false, is a mammal: false

看看我們的例子,你將發現我們定義了一個叫做Animal的新類,它定義了三個方法:isAMammal, isCarnivorous, 和 getHello.你一概還注意到了,我們在每個現存的類申明的前面都新增了extends Animal這個語句.這個語句告訴這些物件是Animal類的子類.

因為方法isAMammal 和 isCarnivorous 都返回 true,所以Dog和Cat類用不著重新實現--即"過載"這兩個方法.但是鴨子既不是哺乳動物又不是肉食性的,所以Duck類需要過載這兩種方法來返回正確的值.我們所有的物件都以自己獨特的方式說"hello",所以它們都需要過載getHello方法.因為每種動物說"hello"的方式都不同,所以我們在基類中將getHello方法申明為抽象的,而且我們沒有給這個方法一個體.這就迫使Animal的每一個子類過載getHello方法並根據每一個特定動物的需要來定義它.

因為我們將getHello方法申明為虛擬的,我們就不能直接例項化Animal物件.因此,我們需要將Animal類也申明為抽象的.我們透過在Animal類定義的開始行新增abstract關鍵字來實現這一點.子類過載它們基類的方法的能力就是多型.多型使得子類能夠使用基類的方法或是在這些方法不足的時候過載它們.這就實現了程式碼重用,加快了程式碼的實現過程,而且它還隔離和程式中的,使得程式的維護更容易.

總結
在本文中,我們學習瞭如何確定潛在的物件.我們還學習瞭如何使用繼承和多型來加快我們的程式碼實現過程並隔離錯誤,這使得程式碼的維護過程更加容易.下一次,我們將展開討論多型和繼承的概念並開始我們對動態繫結的討論.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990130/,如需轉載,請註明出處,否則將追究法律責任。

相關文章