多型可以理解為事物存在的多種體現形態。例如,貓這個物件對應的型別是貓型別:貓 x = new 貓();
,同時貓也是動物中的一種,也可以把貓稱為動物:動物 x = new 貓();
。動物是貓和狗等具體事物中抽取出來的父型別。
多型在程式中的體現為父類的引用或者介面的引用指向了子類的物件。多型出現的前提是必須是類與類之間有關係,要麼繼承,要麼實現;通常還有乙個前提:存在覆蓋。
這裡,我以動物:貓,狗,豬為例說之。
abstract
class
animal
class
catextends
animal
public
void catchmouse()
}class
dogextends
animal
public
void kanjia()
}class
pigextends
animal
public
void gongdi()
}
那麼以下**就是向上轉型——從子到父,父類引用指向子類物件:
animal a = new cat(); // 型別提公升,向上轉型
a.eat();
如果想要呼叫貓的特有方法時,如何操作呢?強制將父類的引用轉成子類型別,即向下轉型:
cat c =(cat)a;
c.catchmouse();
千萬不要出現這樣的操作,就是將父類物件轉成子類型別:
animal a = new animal();
cat c = (cat)a
;
我們能轉換的是父類引用指向了自己的子類物件時,該引用可以被提公升,也可以被強制轉換。多型自始至終都是子類物件在做著變化。
當我們使用向下轉型時,確實是可以帶來好處,即可以使用子類的特有功能。但是也會帶來弊端——必須得面對具體的子型別。這即是說向下轉型有風險,容易發生classcastexception,只要轉換型別和物件型別不匹配就會發生,想要安全,必須要進行判斷,判斷乙個物件是否匹配某乙個型別,這時我們就需要使用乙個新的關鍵字——instanceof了,instanceof的用法為:物件 instanceof 型別
。我們舉例說明:
class
duotaidemo
public
static void function
(animal a) else
if(a instanceof dog) }}
例一,電腦執行示例,電腦執行基於主機板。
inte***ce usb
//描述筆記本
class notebook
/**使用符合規則的外圍裝置。
*/public
void
useusb(usb usb)//定義了乙個介面型別的引用。usb usb = new mousebyusb();多型,提高了筆記本的擴充套件性。
}}//一年後,想要換個滑鼠。只要買乙個符合規則的滑鼠,膝上型電腦就可以用。
class mousebyusb /*extends mouse*/ implements usb
public
void
close()
}//想要鍵盤。
class keybyusb implements usb
public
void
close()
}class usbtest
}
例二,資料庫的操作,資料是使用者資訊。
連線資料庫(jdbc或者hibernate);
運算元據庫(crud)——c creat r read u update d delete;
關閉資料庫連線。
inte***ce
userinfodao
class
userinfobyjdbc
implements
userinfodao
public
void delete(user user)
}class
userinfobyhibernate
implements
userinfodao
public
void delete(user user)
}class
dboperate
}
用一張比較形象的圖來理解,可能比較好點。
第十二天 多型詳解
多型 概念 一種事物,多種體現狀態。實現多型前提 繼承,重寫,向上轉型。屬性看型別,方法看物件 父子出現同名屬性 當父類引用指向子類物件時,使用物件名呼叫父類同名屬性,參考物件名定義時使用的型別 父子出現同名方法 當父類引用指向子類物件時,使用物件名呼叫父類同名方法,參考定義物件時使用的型別 向下轉...
第十二周部落格之物件導向程式設計3
封裝 封裝有兩方面含義 1.將資料 屬性 和行為 方法 包裝到類物件中。在方法內部對屬性進行操作,在類物件的外部呼叫方法。這樣,無需關心方法內部的具體實現細節,從而隔離了複雜度。2.在類物件內部通過訪問控制把某些屬性和方法隱藏起來,不允許在類物件外部直接訪問,而是在類物件的內部對外提供公開的介面方法...
C 研發 泛型程式設計 第十二講 函式物件
函式物件就是我們說的仿函式。過載函式操作符的類,其物件稱為函式物件。函式物件使用過載的 時,行為類似函式呼叫。本質 函式物件 仿函式 是乙個類建立出的物件,不是乙個函式,只是像函式。函式物件在使用時,可以像普通函式那樣呼叫,可以有引數,可以有返回值 函式物件超出普通函式的概念,函式物件可以有自己的狀...