1. 程式人生 > >java繼承、多臺、抽象類概念

java繼承、多臺、抽象類概念

1.繼承中的構造方法
繼承解決程式碼複用問題!

子類的構造過程中必須呼叫其父類的構造方法,否則是無源之水了。如果子類的構造方法中沒有顯式的呼叫基類構造方法,則系統預設呼叫基類無引數的構造方法。
子類可以在自己的構造方法中使用super([引數列表])呼叫基類的構造方法,使用this([引數列表])呼叫本類的另外的構造方法。
注意:如果呼叫super,必須寫在子類構造方法的第一行!

2.物件轉型(casting)
一個基類的引用型別變數可以"指向"其子類的物件,也就是說形參是父類時,可以傳入其子類的例項。
一個基類的引用不可以訪問其子類物件新增加的成員屬性和成員方法。
可以使用 引用變數名 instanceof 類名

來判斷引用變數所指向的物件是否屬於該類。
子類的物件可以當作基類的物件來使用稱作相似轉型(upcasting),反正成為向下轉型(downcasting)。

3.多型(動態繫結)存在的條件
(1)要有繼承
(2)要有重寫
(3)父類引用指向子類物件

當上述三個條件滿足時,當呼叫父類中被重寫的方法時,new哪個子類物件,就呼叫該子類物件的方法。

多型性:當父類引用指向子類物件時,如果子類有方法,則呼叫該子類的方法,如果沒有,則呼叫父類的方法

4.抽象類:public abstract void enjoy();
適用條件:當父類中的方法不確定時,可以宣告為抽象方法,被子類重寫

含有抽象方法的類必須被宣告為抽象類,抽象類必須被繼承,抽象方法必須被重寫


抽象類不能被例項化
抽象方法只需宣告,不需實現

抽象類中不一定必須要有抽象方法,還有抽象方法的類必須為抽象類

5.final
可以修飾變數、方法和類
變數的值不能被改變 final int i = 8; public void m(final int j){ j = 9;//錯誤,j不能被改變}
方法不能被重寫 public final void m(){}
類不能被繼承
String類就是final類:public final class String extends Object
Math類也是final類:public final class Math extends Object

6.將物件之間公共的方法設定為抽象的,讓子類繼承實現該方法
例如Animal類sleep()方法

7.JNI
JNI允許JVM內部執行的Java程式碼能夠與用其他程式語言編寫的應用程式和庫進行相互操作。
JNI可以理解為Java和本地應用程式之間的中介。

什麼時候使用JNI?
如果想訪問OS特有的功能,想要和特殊的硬體溝通,利用其他語言實現,然後利用JNI和java溝通。

8.如果父類中的方法丟擲多個異常,則子類中的覆蓋方法要麼丟擲相同的異常,要麼丟擲異常的子類,但不能丟擲新的異常!注意:構造方法除外