国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

面向對象高級特性1:抽象類

2019-11-14 12:30:11
字體:
來源:轉載
供稿:網友

一、抽象類(abstract class) 隨著繼承層次中一個個新子類的定義,類變得越來越具體,而父類則更一般,更通用。類的設計應該保證父類和子類能夠共享特征。有時將一個父類設計得非常抽象,以至于它沒有具體的實例,這樣的類叫做抽象類。 這里寫圖片描述 當多個類中出現相同功能,但是功能主體不同,這時可以進行向上抽取。有時只抽取功能定義,而不抽取功能主體。

class Chinese{ public void speak(){ System.out.一種抽取:

class Person{ public void speak(){//沒具體語言}}//又不能省略,因為speak是Person類的一個行為特征,需要在Person類中得到體現

另一種抽取:

abstract class Person{ public abstract void speak();}class Chinese extends Person{ public void speak(){ System.out.println("中文"); }}class American extends Person{ public void speak(){ System.out.println("英文"); }}class Japanese extends Person{ public void speak(){ System.out.println("日文"); }}

二、語法 1、用abstract關鍵字來修飾一個類時,這個類叫做抽象類; 2、用abstract來修飾一個方法時,該方法叫做抽象方法。 抽象方法:只有方法的聲明,沒有方法的實現。以分號結束:

權限修飾符 abstract 返回值類型 方法名(參數列表);

3、含有抽象方法的類必須被聲明為抽象類。 4、抽象類不能被實例化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,并提供方法體。若沒有重寫全部的抽象方法,仍為抽象類。 5、不能用abstract修飾屬性、私有方法、構造器、靜態方法、final的方法。

三、抽象類的應用 抽象類是用來模型化那些父類無法確定全部實現,而是由其子類提供具體實現的對象的類。 在航運公司系統中,Vehicle類需要定義兩個方法分別計算運輸工具的燃料效率和行駛距離。 這里寫圖片描述 問題:卡車(Truck)和駁船(RiverBarge)的燃料效率和行駛距離的計算方法完全不同。Vehicle類不能提供計算方法,但子類可以。 解決方案 java允許類設計者指定:超類聲明一個方法但不提供實現,該方法的實現由子類提供。這樣的方法稱為抽象方法。有一個或更多抽象方法的類稱為抽象類。 Vehicle設計為一個抽象類,有兩個抽象方法。

abstract class Vehicle{ public abstract double calcFuelEfficiency();//計算燃料效率的抽象方法 public abstract double calcTripDistance(); //計算行駛距離的抽象方法}class Truck extends Vehicle{ public double calcFuelEfficiency( ){ //寫出計算卡車的燃料效率的具體方法 return 0.0; } public double calcTripDistance( ){ //寫出計算卡車行駛距離的具體方法 return 0.0; }}class RiverBarge extends Vehicle{ public double calcFuelEfficiency( ) { //寫出計算駁船的燃料效率的具體方法 return 0.0; } public double calcTripDistance( ) { //寫出計算駁船行駛距離的具體方法 return 0.0; }}/* * 抽象類與普通類的區別 * 1、抽象類是abstract,它可以包含抽象方法 * 2、抽象類不能被實例化,普通類可以實例化 * 3、抽象類中可以屬性嗎?可以 * 4、抽象類中可以構造方法嗎?可以,可以為抽象類中的屬性初始化 * 5、抽象類中可以非抽象的成員方法嗎?可以 * 6、抽象類中可以靜態方法嗎?因為靜態方法的調用不需要對象 * 7、抽象類中可以靜態的屬性嗎?可以使用,表示所子類對象共享 * 8、抽象類中一定要有抽象方法嗎?不是,可以沒有抽象方法,這個時候的出發點是限制這個類不能創建對象 * * 哪些地方可以使用abstract修飾 * (1類:可以,表示不能實例化這個類,可以包含抽象方法 * (2屬性:沒抽象屬性一說,而且抽象的東西就是想要被子類覆蓋的,而屬性不能被覆蓋 * (3構造方法:不可以,構造方法不能被繼承更談不上重寫 * (4成員方法:可以 * (5局部變量:不可以 * (6代碼塊:不可以,代碼塊只能被唯一的修飾符static修飾 * (7可以在靜態方法前面加abstract:不能,一個不能被重寫,一個必須被重寫 * (8可以在final的方法前面嗎?不能,一個不能被重寫,一個必須被重寫 * (9可以在private方法前面嗎?在子類中不可見,所以沒法進行重寫 * */
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梨树县| 福泉市| 清流县| 绍兴县| 讷河市| 兴安盟| 张掖市| 鱼台县| 白山市| 来凤县| 西吉县| 拜城县| 松潘县| 中江县| 奉新县| 抚顺市| 柯坪县| 清新县| 崇州市| 吉林省| 登封市| 洪洞县| 额尔古纳市| 渝中区| 广德县| 商南县| 大厂| 凌源市| 集安市| 本溪| 深圳市| 边坝县| 昌图县| 北流市| 化州市| 博乐市| 尼勒克县| 门头沟区| 竹山县| 石城县| 南部县|