多態(tài)性
多態(tài)性的字典定義是指生物學(xué)中的原理,其中生物體或物種可以具有許多不同的形式或階段,這個原則也可以應(yīng)用于面向?qū)ο蟮木幊毯拖馢ava語言之類的語言,類的子類可以定義它們自己的唯一行為,但仍然共享父類的一些相同功能。
可以通過對Bicycle類的微小修改來演示多態(tài)性,例如,可以將printDescription方法添加到顯示當(dāng)前存儲在實例中的所有數(shù)據(jù)的類中。
public void printDescription(){ System.out.println(" Bike is " + "in gear " + this.gear + " with a cadence of " + this.cadence + " and travelling at a speed of " + this.speed + ". "); }
要演示Java語言中的多態(tài)特性,請使用MountainBike和RoadBike類擴展Bicycle類,對于MountainBike,添加一個suspension字段,這是一個字符串值,表示自行車是否有前減震器,或者,自行車有一個前后減震器。
這是更新的類:
public class MountainBike extends Bicycle { private String suspension; public MountainBike( int startCadence, int startSpeed, int startGear, String suspensionType){ super(startCadence, startSpeed, startGear); this.setSuspension(suspensionType); } public String getSuspension(){ return this.suspension; } public void setSuspension(String suspensionType) { this.suspension = suspensionType; } public void printDescription() { super.printDescription(); System.out.println("The " + "MountainBike has a" + getSuspension() + " suspension."); } }
請注意重寫的printDescription方法,除了之前提供的信息之外,還有關(guān)于suspension的其他數(shù)據(jù)包含在輸出中。
接下來,創(chuàng)建RoadBike類,因為公路車或賽車的輪胎很薄,所以添加一個屬性來跟蹤輪胎的寬度,這是RoadBike類:
public class RoadBike extends Bicycle{ // In millimeters (mm) private int tireWidth; public RoadBike(int startCadence, int startSpeed, int startGear, int newTireWidth){ super(startCadence, startSpeed, startGear); this.setTireWidth(newTireWidth); } public int getTireWidth(){ return this.tireWidth; } public void setTireWidth(int newTireWidth){ this.tireWidth = newTireWidth; } public void printDescription(){ super.printDescription(); System.out.println("The RoadBike" + " has " + getTireWidth() + " MM tires."); } }
請注意,再次重寫了printDescription方法,這次,顯示有關(guān)輪胎寬度的信息。
總而言之,有三個類:Bicycle、MountainBike和RoadBike,這兩個子類重寫printDescription方法并打印唯一信息。
這是一個創(chuàng)建三個Bicycle變量的測試程序,每個變量都分配給三個自行車類別中的一個,然后打印每個變量。
public class TestBikes { public static void main(String[] args){ Bicycle bike01, bike02, bike03; bike01 = new Bicycle(20, 10, 1); bike02 = new MountainBike(20, 10, 5, "Dual"); bike03 = new RoadBike(40, 20, 8, 23); bike01.printDescription(); bike02.printDescription(); bike03.printDescription(); } }
以下是測試程序的輸出:
Bike is in gear 1 with a cadence of 20 and travelling at a speed of 10. Bike is in gear 5 with a cadence of 20 and travelling at a speed of 10. The MountainBike has a Dual suspension. Bike is in gear 8 with a cadence of 40 and travelling at a speed of 20. The RoadBike has 23 MM tires.
Java虛擬機(JVM)為每個變量中引用的對象調(diào)用適當(dāng)?shù)姆椒?,它不會調(diào)用由變量類型定義的方法,此行為稱為虛方法調(diào)用,并演示Java語言中重要多態(tài)特征的一個方面。
上一篇:重寫和隱藏方法 下一篇:使用super關(guān)鍵字文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72876.html
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續(xù)版本中引入的改進。 Java教程是希望使用Java編程語言創(chuàng)建應(yīng)用程序的程序員的實用指南,其中包括數(shù)百個完整的工作示例和數(shù)十個課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...
使用super關(guān)鍵字 訪問超類成員 如果你的方法覆蓋了它的一個超類的方法,你可以通過使用關(guān)鍵字super來調(diào)用被重寫的方法,你也可以使用super來引用隱藏字段(盡管不鼓勵隱藏字段),慮這個類,Superclass: public class Superclass { public void printMethod() { System.out.println(Print...
類型擦除 泛型被引入到Java語言中,以便在編譯時提供更嚴格的類型檢查并支持通用編程,為了實現(xiàn)泛型,Java編譯器將類型擦除應(yīng)用于: 如果類型參數(shù)是無界的,則用它們的邊界或Object替換泛型類型中的所有類型參數(shù),因此,生成的字節(jié)碼僅包含普通的類、接口和方法。 如有必要,插入類型轉(zhuǎn)換以保持類型安全。 生成橋接方法以保留擴展泛型類型中的多態(tài)性。 類型擦除確保不為參數(shù)化類型創(chuàng)建新類,因此,泛型不會...
List接口 List是一個有序的Collection(有時稱為序列),列表可能包含重復(fù)元素,除了從Collection繼承的操作之外,List接口還包括以下操作: 位置訪問 — 根據(jù)列表中的數(shù)字位置操縱元素,這包括get、set、add、addAll和remove等方法。 搜索 — 搜索列表中的指定對象并返回其數(shù)字位置,搜索方法包括indexOf和lastIndexOf。 迭代 — 擴展Ite...
重寫和隱藏方法 實例方法 子類中的實例方法的簽名(名稱,加上其參數(shù)的數(shù)量和類型)和返回類型與超類中的實例方法相同,將覆蓋超類的方法。 子類覆蓋方法的能力允許類從行為足夠接近的超類繼承,然后根據(jù)需要修改行為,重寫方法與它重寫的方法具有相同的名稱、數(shù)量和參數(shù)類型,以及返回類型。重寫方法還可以返回由被重寫方法返回的類型的子類型,此子類型稱為協(xié)變返回類型。 覆蓋方法時,你可能希望使用@Override注解...
閱讀 4038·2021-11-22 13:53
閱讀 3632·2021-11-19 11:29
閱讀 1288·2021-09-08 09:35
閱讀 3181·2020-12-03 17:26
閱讀 522·2019-08-29 16:06
閱讀 2119·2019-08-26 13:50
閱讀 1192·2019-08-23 18:32
閱讀 2164·2019-08-23 18:12