SUN認證

當前位置 /首頁/IT認證/SUN認證/列表

Java方法繼承、過載和覆蓋總結

Java 平臺是基於 Java 語言的平臺。這樣的平臺非常流行。因此微軟公司推出了與之競爭的平臺以及模仿Java的C#語言。下面文章介紹了Java方法繼承、過載、覆蓋總結:

Java方法繼承、過載和覆蓋總結

  1、方法繼承:

利用extends關鍵字一個方法繼承另一個方法,而且只能直接繼承一個類。

* 當Sub類和Base類在同一個包時Sub類繼承Base類中的public/protected/預設級別的變數個方法

* 在不同包時繼承public/protected級別的變數和方法。

  2、方法過載:

如果有兩個方法的方法名相同,但引數不一致,哪麼可以說一個方法是另一個方法的過載。

* 方法名相同

* 方法的引數型別,個數順序至少有一項不同

* 方法的返回型別可以不相同

* 方法的修飾符可以不相同

* main方法也可以被過載

  3、方法覆蓋:

如果在子類中定義一個方法,其名稱、返回型別及引數簽名正好與父類中某個方法的名稱、返回型別及引數簽名相匹配,那麼可以說,子類的方法覆蓋了父類的方法。

* 子類的方法名稱返回型別及引數簽名 必須與父類的一致

* 子類方法不能縮小父類方法的訪問許可權

* 子類方法不能丟擲比父類方法更多的異常

* 方法覆蓋只存在於子類和父類之間,同一個類中只能過載

* 父類的靜態方法不能被子類覆蓋為非靜態方法

* 子類可以定義於父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法(滿足覆蓋約束), 而且Java虛擬機器把靜態方法和所屬的類繫結,而把例項方法和所屬的例項繫結。

* 父類的非靜態方法不能被子類覆蓋為靜態方法

* 父類的私有方法不能被子類覆蓋

* 父類的抽象方法可以被子類通過兩種途徑覆蓋(即實現和覆蓋)(P169)

* 父類的非抽象方法可以被覆蓋為抽象方法

  4、Super關鍵字:

super和this關鍵字都可以用來覆蓋Java語言的預設作用域,使被遮蔽的方法或變數變為可見(三種情況下的不可見 P171)。

* 父類的成員變數和方法為private使用super訪問編譯出錯

* 在類的構造方法種,通過super語句呼叫這個類的.父類的構造方法

* 在子類種訪問父類的被遮蔽的方法和屬性

* 只能在構造方法或例項方法內使用super關鍵字,而在靜態方法和靜態程式碼塊內不能使用super

  5、多型:

* 對於一個引用型別的變數,Java編譯器按照它的宣告的型別來處理

* 對於一個引用型別的變數,執行時Java虛擬機器按照它的實際引用的物件來處理

* 執行時環境中,通過引用型別變數來訪問所引用物件的方法和屬性時,Java虛擬機器採用以下繫結規則

1)例項方法與引用變數實際引用的物件的方法繫結,屬於動態繫結

2)靜態方法與引用變數所宣告的型別的方法繫結,屬於靜態繫結

3)成員變數(包括靜態和例項變數)與引用變數所宣告的型別的成員變數繫結,屬於靜態繫結

Java程式碼

class Super {

static int stat = 1;

int nonStat = 2;

static int statMethod(){

return 3;

}

int nonStatMethod(){

return 4;

}

}

public class Sub extends Super {

static int stat = 10;

int nonStat = 20;

static int statMethod(){

return 30;

}

int nonStatMethod(){

return 40;

}

public static void main(String args) {

Super s = new Sub();

tln("Static is " + );

tln("Non-Static is " + tat);

tln("Static method is " + Method() );

tln("Non-Static method is " + tatMethod() );

Sub sub = (Sub)s;

tln("Static is " + );

tln("Non-Static is " + tat);

tln("Static method is " + Method() );

tln("Non-Static method is " + tatMethod() );

}

}

輸出結果:

Static is 1

Non-Static is 2

Static method is 3

Non-Static method is 40

Static is 10

Non-Static is 20

Static method is 30

Non-Static method is 40

TAG標籤:JAVA 過載 覆蓋 繼承 #