Java基礎 08 物件導向(續3)

2021-06-29 11:13:06 字數 3720 閱讀 8429

(1)、多型:可以理解為事物存在的多種體現形式。 例如:

人:男人、女人。 動物:貓、狗。

eg:

貓  x  =  new  貓  ()  ;

動物 x = new 貓 () ;

(2)、特徵

輸出結果:

吃魚

吃骨頭吃魚

吃骨頭飼料

吃魚

前例中的 animal a = new cat(); 我們稱為型別提公升,也叫向上轉型。

如果想要呼叫貓的特有方法時,如何操作? 強制將父類的引用,轉成子類型別,稱作向下轉型。 例如:

cat c = (cat) a ;

c.catchmouse;

但如果這樣的話,錯誤:

animal a = new animal();

cat c = (cat) a;

千萬不要出現以上這樣的操作,就是將父類物件轉成子類型別,我們能轉換的是父類應用指向了自己的子類物件時,該應用可以被提公升,也可以被強制轉換,多型自始至終都是子類物件在做著變化。

eg:

class fu

void method_2()

}class zi extends fu

void method_3()

}class duotaidemo4

}

在多型中成員函式的特點:

(1)在編譯時期:參閱引用型變數所屬的類中是否有呼叫的方法,如果有,編譯通過,如果沒有編譯失敗。

(2)在執行時期:在參閱物件所閱的類中是否有呼叫的方法。

簡單總結就是:成員函式在多型呼叫時,編譯看左邊,執行看右邊。

另乙個例子:

class fu 

class zi extends fu

class duotaidemo4

}

輸出結果:

5

8

在多型中,成員變數的特點:無論編譯和執行,都參看左邊(引用型變數所屬的類)

例:

class fu 

}class zi extends fu

}class duotaidemo4

}

程式結果:

fu method_1

zi method_1

實際小應用

/*

* 需求:

* 電腦執行示例。電腦執行基於主機板*/

//未運用多型機制編寫的**,即未改善的**

class mainboard //主機板

public void usenetcard(netcard c) //主機板上的功能,使用網絡卡(網絡卡插入)

}class netcard //網絡卡

public void close() //關閉網絡卡

}class duotaidemo5

}

程式輸出結果:

mainboard run

netcard open

netcard close

但以上**類與類之間耦合性太強。實際中電腦主機板與各硬體之間聯絡的藕帶還有乙個關鍵的介面(pci),如圖:

改善後的**: eg:

inte***ce pci        //pci介面

class mainboard //主機板類

public void usepci(pci p) //pci p = new newcard(); 這是介面型引用指向自己的子類物件

}}class netcard implements pci //網絡卡實現pci介面

public void close() //功能覆蓋,關閉網絡卡

}class soundcard implements pci //音效卡實現pci介面

public void close() //功能覆蓋,關閉音效卡

}class duotaidemo5

}

程式結果:

mainboard run!

netcard open!

netcard close!

soundcard open!

soundcard close!

/*

*需求:資料庫的操作

*1、連線資料庫。jdbc、hibernate

*2、運算元據庫:creat、read、update、delete

*3、關閉資料庫連線。

* */

class userinfobyjdbc

public void delete(user user)

}class dboperate

通過觀察以上的偽**我們可以發現問題:若我們不想用jdbc連線資料庫,而是hibernate連線,那麼我們又要定義乙個新的userinfobyhibernate類,麻煩,這樣設計程式耦合性太強,沒考慮到程式的擴充套件性。

如圖:

然而,我們考慮一種新的方法來解決程式類之間的耦合性差問題,增加程式的擴充套件性。 我們引用乙個dao(date access object)方法,如圖:

以下是偽**: eg:

inte***ce userinfodao

class userinfobyjdbc implements userinfodao

class userinfobyhibernate implements userinfodao

class dboperate

}

object類:是所有物件的直接或者間接父類,傳說中的上帝,該類中定義的肯定是所有物件都具備的功能。

eg:

class demo  //extends object

class objectdemo

}

程式結果:false

object類中已經提供了對物件是否相同的比較方法equal (),如果自定義類中也有比較相同的功能,沒有必要重新定義, 只要沿襲父類中的功能,建立自己特有比較內容即可,也就是覆蓋。 eg:

class demo

public boolean equals(object obj) //複寫

else

}}class person

class objectdemo

}

程式結果:

true

false

Java基礎 物件導向

1.理解物件導向 強調的是功能行為 將功能封裝進物件,強調具備了功能的物件。1.1 物件導向的好處 先要去找具有所需的功能的物件來用。如果該物件不存在,那麼建立乙個具有所需功能的物件。這樣簡化開發並提高復用。1.2 物件導向開發,設計,特徵 開發的過程 其實就是不斷的建立物件,使用物件,指揮物件做事...

java基礎 物件導向

面向過程的思想 一步一步去實現,而具體的每一步都需要我們去實現和操作,這些步驟相互協作完成我們的需求 面向思想 將步驟和功能進行封裝,用的時候,找對應的類 物件導向不關注過程 物件導向就相當於指揮者 面向過程相當於員工 物件導向是基於面向過程 特點 是一種更符合人們思考習慣的思想。可以將複雜的事情簡...

Java基礎 物件導向

可以拿生活中的例項來理解面向過程與物件導向,例如五子棋。封裝 encapsulation 繼承 inheritance 多型 polymorphism 1.定義 隱藏物件的屬性和實現細節,僅對外公開介面,控制在程式中屬性的讀取和修改的訪問級別。2.封裝途徑4.好處3.原則4.成員變數和區域性變數 成...