1. 程式人生 > 其它 >_面向物件程式設計----繼承_組合

_面向物件程式設計----繼承_組合

如果聽到那一段聽不清楚,直接把結論記下來接著聽就行。

繼承VS組合

is-a”關係使用繼承!

是的關係

用繼承,如哺乳動物是動物

--上面的通過在Audi類中增加一個Car屬性雖然也複用了程式碼,但是不合邏輯不容易理解。

has-a”關係使用組合!

擁有關係

如鳥類有爪子有眼睛,這個用組合合適一些。如果說鳥繼承眼睛,鳥繼承爪子就不合適了。

--計算機類,主機板類。可以通過在計算機類中增加主機板屬性來複用主機板類的程式碼! 

僅僅從程式碼的複用來說的話組合完全可以替代繼承。 

Eclipse中如果誤刪程式碼可以通過以下方法恢復:

滑鼠右擊選擇 Replace With在選擇 Local History

在視窗上面選擇對應的時間,就可以直接看到程式碼了直接複製就行。

package cn.bjsxt.oop.inherit;
/**
* 測試組合
* @author 神奇的夢
* 從建模角度來看,繼承就是繼承,組合就是組合
* 要是從複用角度上來講,他們是可以互相取代的。
*/
public class Animal2{
String eye;
public void run() {
System.out.println("咳咳咳!");
}
public void eat() {
System.out.println("色塊!");
}
public void sleep() {
System.out.println("乾飯!");


}
public Animal2() {
System.out.println("建立一個動物!");
}
// 它雖然在Animal2類裡面,但是按邏輯上講它是獨立的
public static void main(String[] args) {
Bird2 b=new Bird2();
b.run();
// 可以通過b.animal2.eat來呼叫上級類中的方法
b.animal2.eat();
}
}
class Mammal2{
Animal2 animal2=new Animal2();
public void taishang() {
System.out.println("洛賽克!");
}
}
class Bird2{
// 空指標異常
如果Animal2 animal2;是空的是沒有方法的

// 通過這個物件animal2它有沒有指向堆裡面的一個物件。
// 所以他是空指標。

Animal2 animal2;
// 這樣我們new一下就可以了
Animal2 animal2=new Animal2();
String eye;
public void run() {
animal2.run();//可以實現複用 ,所以組合比繼承更靈活一些
System.out.println("我是我是一隻鳥,我會飛!");
}
public void eggSheng() {
System.out.println("了空間!");
}
public Bird2() {
System.out.println("建一個鳥窩!");
}
}