1. 程式人生 > >Java語言基礎23-27--子類與繼承

Java語言基礎23-27--子類與繼承

子類與繼承

利用繼承,可以先編寫一個共有屬性一般類,根據該一般類再編寫具有特殊屬性的新類,

新類繼承一般類的狀態和行為,並根據需要增加它自己的新的狀態和行為。
由繼承而得到的類稱為子類,被繼承的類稱為父類(超類)。
宣告一個類的子類的格式如下:
class 子類名 extends 父類名 {
    … … 

例如:
class Student extends People {
    … … 
}

 

一、子類的繼承性

所謂子類繼承父類的成員變數作為自己的一個成員變數,就好象它們是在子類中直接宣告一樣,

可以被子類中自己定義的任何例項方法操作。
所謂子類繼承父類的方法作為子類中的一個方法,就象它們是在子類中直接定義了一樣,

可以被子類中自己定義的任何例項方法呼叫。 

1、子類與父類在同一包中的繼承性

如果子類和父類在同一個包中,那麼,子類自然地繼承了其父類中不是private的成員變數作為自己的成員變數,並且也自然地繼承了父類中不是private的方法作為自己的方法,繼承的成員變數或方法的訪問許可權保持不變。

2、子類與父類不在同一包中的繼承性

如果子類和父類不在同一個包中,那麼,子類繼承了父類的protected、public成員變數做為子類的成員變數,並且繼承了父類的protected、public方法為子類的方法

,繼承的成員或方法的訪問許可權保持不變。

3、關於instanceof運算子

instanceof運算子是Java獨有的運算子號。
instanceof是雙目運算子,其左面的操作元是物件,右面的操作元是類,

當左面的操作元是右面的類或子類所建立的物件時,instanceof運算的結果是true,否則是false。 

 

二、成員變數的隱藏

在編寫子類時,我們仍然可以宣告成員變數,一種特殊的情況是,如果所宣告的成員變數的名字和從父類繼承來的成員變數的名字相同(宣告的型別可以不同),在這種情況下,子類就會隱藏掉所繼承的成員變數,即子類重新宣告定義了這個成員變數。需要注意的是,子類物件仍然可以呼叫從父類繼承的方法操作隱藏的成員變數。

 

三、方法重寫

子類通過重寫可以隱藏已繼承的例項方法。
1.重寫的語法規則
如果子類可以繼承父類的某個例項方法,那麼子類就有權利重寫這個方法。
方法重寫是指:子類中定義一個方法,這個方法的型別和父類的方法的型別一致或者是父類的方法的型別的子型別,並且這個方法的名字、引數個數、引數的型別和父類的方法完全相同。 
2.重寫的目的
子類通過方法的重寫可以隱藏繼承的方法,子類通過方法的重寫可以把父類的狀態和行為改變為自身的狀態和行為。  
3.JDK 1.5對重寫的改進 
在JDK 1.5版本之後,允許重寫方法的型別可以是父類方法的型別的子型別,即不必完全一致.也就是說,如果父類的方法的型別是“類”,重寫方法的型別可以是“子類”。  
4.重寫的注意事項 
重寫父類的方法時,不可以降低方法的訪問許可權

 

四、super關鍵字

在子類中想使用被子類隱藏的成員變數或方法就可以使用關鍵字super。
比如super.x、super.play()就是訪問和呼叫被子類隱藏的成員變數x和方法play()。

 

五、物件的上轉型物件

假設,A類是B類的父類,當用子類建立一個物件,並把這個物件的引用放到父類的物件中時,此時這個父類的物件就稱之為子類建立的物件的上轉型物件,比如:
A a;
B b=new B();
a=b;
或者
A a;
a=new B();
或者
A a=new B();

1、變化

2、注意事項

(1)不要將父類建立的物件和子類物件的上轉型物件混淆。
(2)可以將物件的上轉型物件再強制轉換到一個子類物件,這時,該子類物件又具備了子類所有屬性和功能。
(3)不可以將父類建立的物件的引用賦值給子類宣告的物件。

 

六、繼承與多型

當一個類有很多子類時,並且這些子類都重寫了父類中的某個例項方法,那麼當我們把子類建立的物件的引用放到一個父類的物件中時,就得到了該物件的一個上轉型物件,那麼這個上轉型物件在呼叫這個例項方法時就可能具有多種形態,因為不同的子類在重寫父類的例項方法時可能產生不同的行為。
多型性就是指父類的某個例項方法被其子類重寫時,可以各自產生自己的功能行為。 

 

七、abstract類與abstract方法

1、注意事項

(1)和普通的類相比,abstract類可以有abstract方法,也可以有非abstract方法。
(2)對於abstract類,我們只能宣告,不能使用new運算子建立該類的物件

如果一個非抽象類是某個抽象類的子類,那麼它必須重寫父類的抽象的方法,給出方法體。
(3)abstract類也可以沒有abstract方法。
(4)如果一個abstract類是abstract類的子類,它可以重寫父類的abstract方法,也可以繼承這個abstract方法。
(5)對於abstract方法,只允許宣告,不允許實現

2、面向抽象程式設計

在設計一個程式時,可以通過在abstract類中宣告若干個abstract方法,表明這些方法在整個系統設計中的重要性,方法體的內容細節由它的非abstract子類去完成
使用多型進行程式設計的核心技術之一是使用上轉型物件,即將abstract類宣告物件作為其子類的上轉型物件,那麼這個上轉型物件就可以呼叫子類重寫的方法。
所謂面向抽象程式設計,是指當設計某種重要的類時,不讓該類面向具體的類,而是面向抽象類,即所設計類中的重要資料是抽象類宣告的物件,而不是具體類宣告的物件。