文章目錄
- 前言
- 一、抽象(abstract)類的設計要點
- 二、抽象類的應用實例
- 2.1、創建一個抽象類
- 2.2、創建抽象類非抽象子類
- 2.3、通過上轉型對象調用子類方法
- 總結
前言
面向抽象原則是面向對象四大基本原則的第一條,其重要性不言而喻,面向抽象原則分為抽象(abstract)類和接口(interface)以及面向抽象編程,由于篇幅有限本文我們主要細說抽象(abstract)類的設計與應用,并通過引入具體案例的形式使概念更便于理解。一、抽象(abstract)類的設計要點
- 抽象類中可以有 abstract 方法,也可以有非 abstract 方法。
- 抽象類不能用 new 運算符創建對象。
- 抽象類的子類必須重寫父類的 abstract 方法,在子類中將 abstract 方法重新聲明,但必須去掉 abstract 修飾符,同時保證聲明的方法名字、返回類型、參數個數和類型與父類的 abstract 方法相同。
- 抽象類創建的對象可以作為上轉型對象。抽象類雖然不能使用 new 運算符創建對象,但是由于非 abstract 子類必須重寫父類全部 abstract 方法,所以可以讓抽象類聲明的對象成為子類對象的上轉型對象,并可以調用子類重寫的方法。
二、抽象類的應用實例
2.1、創建一個抽象類
首先我們創建一個抽象類 A,里面有一個 abstract 方法 int add(int x,int y),相應代碼如下:
package com.bailu.principle;/** 面向抽象原則* 抽象類中可以有abstract方法,也可以有非abstract方法* 抽象類不能用new運算符創建對象*/
public abstract class A {public abstract int add(int x, int y);
}
2.2、創建抽象類非抽象子類
接著我們創建非抽象子類 B,繼承父類 A,并且重寫父類 A 中的 abstract 方法 int add(int x,int y),實現計算參數 x 與 y 的值,相應代碼如下:
package com.bailu.principle;/** 抽象類的子類必須重寫父類的abstract方法,在子類中將abstract方法重新聲明,但必須去掉abstract修飾符,* 同時要保證聲明的方法名字、返回類型、參數個數和類型與父類的abstract方法完全相同*/
public class B extends A {@Overridepublic int add(int x, int y) {return x + y;}}
2.3、通過上轉型對象調用子類方法
我們假設 b 是 B 創建的對象,那么根據規則就可以讓 A 類聲明的對象 a 成為對象 b 的上轉型對象,即讓 a 存放 b 的引用。也就可以調用子類中重寫的 int add(int x,int y) 方法,相應代碼如下:
package com.bailu.principle;/** 抽象類雖然不能用new運算符創建對象,但是可以通過非abstract子類重寫父類全部abstract方法* 這樣就可以讓抽象類聲明的對象成為其子類的上轉型對象,并調用子類重寫的方法*/
public class Application {public static void main(String[] args) {A a;a = new B();// a是B類對象的上轉型對象int m = a.add(1, 2);// a調用子類B重寫的方法System.out.println(m);}
}
運行結果具體如下圖所示:
總結
在本文給大家介紹了面向抽象原則概念中的抽象(abstract)類內容,并總結了在開發中抽象類的設計要點,通過引入具體的案例的形式進一步分析,可能有些同學對于其中上轉型對象的概念比較突兀,在案例中具體分析之后也就容易掌握了。我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!