java繼承(翻譯自Java Tutorials)

來源:互聯網
上載者:User

原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/25/2788247.html

繼承介紹

在java語言中,類可以從其他類繼承而來,並繼承父類的成員和方法。

繼承是簡單但是非常強大:當你需要建立一個新類,但是已經有其他類,它已經包含了一些你需要的代碼,那麼你可以從已有的這個類,繼承新的類。這樣,你不用寫重複的代碼和調試,就可以重用已有類的成員和方法。

子類從父類繼承所有的成員(變數,方法和內部類),構造方法不是成員,所以不會被繼承,但是子類的構造方法可以調用父類的構造方法。

在java平台中,java.lang.Object是所有類的父類,有些類直接繼承Object,有些類間繼承其他類,其他類繼承自Object。

 

繼承例子

Bicycle類

public class Bicycle {            // the Bicycle class has    // three fields    public int cadence;    public int gear;    public int speed;            // the Bicycle class has    // one constructor    public Bicycle(int startCadence, int startSpeed, int startGear) {        gear = startGear;        cadence = startCadence;        speed = startSpeed;    }            // the Bicycle class has    // four methods    public void setCadence(int newValue) {        cadence = newValue;    }            public void setGear(int newValue) {        gear = newValue;    }            public void applyBrake(int decrement) {        speed -= decrement;    }            public void speedUp(int increment) {        speed += increment;    }        }

一個類MountainBike類繼承自Bicycle:

public class MountainBike extends Bicycle {            // the MountainBike subclass adds    // one field    public int seatHeight;    // the MountainBike subclass has one    // constructor    public MountainBike(int startHeight,                        int startCadence,                        int startSpeed,                        int startGear) {        super(startCadence, startSpeed, startGear);        seatHeight = startHeight;    }               // the MountainBike subclass adds    // one method    public void setHeight(int newValue) {        seatHeight = newValue;    }   }

MountainBike繼承Bicycle的所有變數和方法,並添加了seatHeight變數和對應的set方法。MountainBike新類,它有四個變數和五個方法,不過你未必要全部都要使用。

如果Bicycle的方法很複雜,並已經使用了大量的時間調試,那麼這種複用代碼的方式,是相當簡單並有價值。

 

子類能做的事情

子類繼承父類所有的public和protected成員,不管父類在哪個包。如果子類和父類在同一個包,它也會繼承父類的package-private成員(沒有修飾public,privat,protected的成員),對於繼承的成員,可以替換它,隱藏它,或者補充新成員:

1.被繼承的成員變數可以直接使用,就像使用其他成員

2.聲明一個新成員變數,名字和父類的成員變數名字一樣,就隱藏了該成員(不推薦)

3.聲明不存在父類的新成員變數。

4.繼承的方法可以直接使用

5.在子類實現一個與父類簽名一樣的方法,可以覆蓋父類的方法。

6.在子類實現一個與父類簽名一樣的新的static方法,可以覆蓋父類的方法。

7.可以聲明一個不存在父類的新成員方法。

8.實現一個子類的構造器,通過隱式或者顯示使用super調用父類的構造器。

 

父類的private成員

子類不會繼承父類的private成員,但是,如果父類已經有public或protected方法訪問的私人成員,那麼通過可以繼承的方法,依然可以間接訪問父類的private成員.

內部類可以訪問嵌套類的所有成員,包括嵌套類private成員。

 

對象轉換

一個對象的執行個體化,我們可能這麼寫:

public MountainBike myBike = new MountainBike();

這表示myBike是MountainBike類型。

MountainBike派生自BicycleObject,所以,一個MountainBike執行個體既是一個Bicycle,也是一個Object.

而逆轉的未必是可以的:一個Bicycle未必是MountainBike。同樣的,一個Object未必是Bicycle或者MountainBike。

類型轉換顯示在允許的繼承和實現中,一個對象,從一種類型替換為另一種類型的用法.例如

Object obj = new MountainBike();

這樣obj既是一個Object,也是一個Mountainbike。

另一邊,我們這麼寫:

MountainBike myBike = obj;

我們會遇到一個編譯時間錯誤,因為對於obj,編譯器不知道它是一個MountainBike。儘管如此,我們可以告訴編譯器,通過顯示轉換,將obj轉換為類型MountainBike

MountainBike myBike = (MountainBike)obj;

這種轉換為插入一個運行時檢測,編譯器會安全假設obj是一個MountainBike類型,但如果obj不是一個MountainBike,運行時,會拋出異常。

 

當然,你可以使用instanceof操作符做邏輯測試,判斷obj是否MountainBike類型再做轉換

if (obj instanceof MountainBike) {    MountainBike myBike = (MountainBike)obj;}

這樣,我們做類型轉換,就不會有運行時異常拋出了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.