現實概念:
1.IS-A的想法,例如Dog IS-A Animal,符合現實繼承的感覺。
2.HAS-A的想法,例如Dog HAS-A 叫的動作,符合method為現實物件功能的感覺,實務上通常用HAS-A這種功能包含的情況較多。
3.子類別會繼承父類別所有public的成員函式和成員變數。
4.JAVA沒有像C++的多重繼承,而是以實作不同介面的方式來實現功能擴充。
5.可以自己寫建構式,且建構式不會被繼承。
6.一般情況下編譯器會幫我們寫出沒有參數的建構式,但如果已經實作有參數的建構式,這時需要無參數的建構式的話要自己實作。
super:
1.物件繼承時如果已override某一method,而要用父類別的此method可用super關鍵字,例如:super.roam( )。
2.子類別內也可以用super( )來建構父類別,但是必須放在子類別第一行內容內,否會顯示錯誤。
3.子類別的建構式先叫用,但是會等其父類別建構完成後,才會建構完成。
多型:
1.運用多型時,參考型別可以為實際型別的父類別,例如:
Animal[ ] animals = new Animal[2];
animals[0] = new Dog( );
animals[1] = new Cat( );
也就是右邊可以放任何Animal的子類別,而animals[0].eat( )呼叫Dog的eat( ),animals[1].eat( )呼叫Cat的eat( )。
2.多型也可以用在參數上,例如:
class Vet{
public void giveshot(Animal a){
a.makenoise
}
}
Vet v = new Vet( );
Dog d = new Dog( );
v.giveshot(d);(會執行Dog的makenoise( ))
override:
1.參數必須要一樣,而且回傳型別要能相容。
2.method的存取權不能縮小,也就是不能override一個public的method,然後再將其標示為private。
致命方塊:
1.java只能繼承某個類別,而c++因為可以繼承不同類別,所以只有c++可能發生。
2.假使class c 繼承class a和class b,而class a和class b都有某個函式eat( ),則class c繼承的函式eat( )會有模糊。
留言列表