Java的繼承

繼承是一種由已有的類創建新類的機制。利用繼承,可以先創建一個擁有共同屬性的一般類,根據該一般類再創建具有特殊屬性的新類。由繼承而得到的類稱爲子類(Subclass),被繼承的類被稱爲父類(Superclass)。

直接或間接被繼承的類都是父類。子類繼承父類的狀態和行爲,同時也可以修改父類的狀態和行爲,並添加新的狀態和行爲。Java中不支持多重繼承。

建子類

java中通過在類的聲明中加入extends子句來創建一個類的子類,其格式如下:

class Subclass extends Superclass{

}

如果默認extends子句,則該類爲java.lang.Object的子類。子類可以繼承父類中訪問權限設定爲publicprotectedfieldsmethods。但是不能繼承訪問權限爲private的內容。還有一種default訪問權限,在繼承的過程中如果遇到default權限的fieldsmethod時需要分以下兩種情況考慮:

•►子類和父類在同一包中,子類可以繼承父類的default fields default methods

•►子類和父類不在同一包中,子類不能繼承父類的default fields default methods

Fields的隱藏和Methods的重寫

當子類中定義的fields和父類中的fields同名時,稱子類的fields隱藏了父類的fields。當子類中定義了一個method,並且這個method的名字、返回類型、參數個數以及類型都和父類的某個方法完全相同時,父類的這個方法將被隱藏,這稱作重寫了父類的method

子類通過fields的隱藏和methods的重寫可以把父類的狀態和行爲改變爲自身的狀態和行爲。

super關鍵字

子類在隱藏了父類的fields或重寫了父類的methods後,常常還要用到父類的fields或在重寫的methods中使用父類被重寫的methods以簡化代碼的編寫,這時就要訪問父類的fieldsmethodsJava中通過super來實現父類成員的訪問。我們知道,this用來引用當前對象,與this相似,super用來引用當前對象的父類。

super的使用可以分爲下面3種情況:

•►用來訪問父類被隱藏的fields,如:super.variable

•►用來調用父類中被重寫的methods,如:super.method([paralist])

•►用來調用父類的constructor,如:super([paralist])

對象的上轉型對象

假設class Aclass B的父類,當用子類創建一個object,並把這個object的引用放到父類的對象中時,eg

A a;

A a = new B();

A a;

B b = new B();

a = b;

則稱這個父類對象a是子類對象b的上轉型對象。

對象的上轉型對象的實體是由子類負責創建的,但上轉型對象會失去原對象的一些屬性和功能。上轉型對象具有如下特點:

•►上轉型對象不能操作子類新增fieldsmethods

•►上轉型對象可以操作子類繼承或重寫的fieldsmethods

•►如果子類重寫了父類的某個method後,當對象的上轉型對象調用這個方法時一定是調用了這個重寫的方法,因爲程序在運行時知道,這個上轉型對象的實體是子類創建的,只不過損失了一些功能而已。 

Demo

public class Parent {

public int i = 10;

}

 

public class Subclass1 extends Parent {

public int i = 20;

}

 

public class Subclass2 extends Parent {

public int i = 30;

}

 

public class Main {

 

/**

* @param args

*/

public static void main(String[] args) {

Parent p = new Parent();

Parent sub = new Subclass1();

Subclass2 sub2 = new Subclass2();

System.out.println(p.i + sub.i + sub2.i);

}

 

}

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章