標籤:misc extends ati 靜態屬性 article 選擇 style rac 物件導向
上一篇博文裡總結了物件導向三大特性在Java中的體現。如今談一談Java中的抽象類別,介面,內部類等特性。
一. 抽象類別
public abstract class Shape {public int shapeID = 0;public abstract double getArea();}
- Java中同意類、介面或成員方法具有抽象屬性,而不同意成員域或構造方法具有抽象屬性。
- 類修飾詞中含有abstract的類具有抽象屬性,稱為抽象類別;介面總是具有抽象屬性。
- 假設成員方法的修飾詞中含有abstract。則該成員方法具有抽象屬性,稱為抽象方法。抽象方法僅僅能在抽象類別或介面中定義。而抽象類別中一般有至少一個抽象方法,所以整體上來講。含有抽象方法的類叫做抽象類別。
- 抽象方法不含方法體。格式例如以下:
[方法修飾詞列表] 傳回型別 方法名(參數列表);
- 抽象類別能夠具有構造方法。但不能直接產生執行個體,必須通過非抽象子類產生執行個體。
- 假設抽象類別的子類不是抽象類別,則要求在子類的定義中必須覆蓋父類(抽象類別)的全部抽象方法。
二. 介面Java不同意一個子類擁有多個直接父類,但同意一個類實現多個介面。介面定義的格式為:[介面修飾詞列表] interface 介面名 [extends 介面名列表] { 介面體 }
public interface Shape {public static final double PI = 3.14159;public abstract double getArea();}
- 外部介面和外部類一樣,一般都不具有protected和private屬性
- 介面本身具有抽象屬性。所以abstract修飾詞是不必要的。
- 介面體內部不含構造方法,不能直接通過介面產生執行個體對象
- 介面的全部成員域都具有public、static和final屬性;介面的全部成員方法都具有public和abstract屬性
- 若實現介面的類不是抽象類別。則須要在該類的類體中定義覆蓋該介面中的全部成員方法。
三. 內部類實名內部類
- 實名內部類的封裝性修飾詞添加了protected和private。
能夠依據情況選擇。
- 對於不具有靜態屬性的實名內部類,假設它的成員域具有靜態屬性,則必須同一時候具有final屬性;不具有靜態屬性的實名內部類不能含有具有靜態屬性的方法。
- 實名內部類執行個體對象的建立方法
* 靜態實名內部類的執行個體對象:
new 外部類名.實名內部類名(參數列表)
* 不具有靜態屬性的實名內部類的執行個體對象:
外部類運算式.new 實名內部類名(參數列表)
匿名內部類匿名內部類不具有類名,不能具有抽象和靜態屬性,而且不能派生出子類。匿名內部類的定義格式是:new 父類型名(參數列表) { 類體 }
舉個範例比較easy理解:
abstract class ClassA {int data;public ClassA (int i) { data = i; }public abstract void method();}public class ClassB {public static void main(String[] args) {ClassA a = new ClassA(3) {public void method() {System.out.println(data);}};a.method();}}四. final 修飾詞
- 具有final屬性的的類不能派生子類
- 假設成員域具有final屬性。則不能被子類的成員域所覆蓋,且在賦值後不能被改變。假設成員域同一時候具有final和static屬性,則其僅僅能在定義時賦值;假設成員域僅僅具有final屬性。不具有static屬性。則僅僅能在定義時或構造方法中賦值。
- 假設一個類的成員方法具有final屬性。則其不能被當前類的子類的成員方法覆蓋。
五. static 修飾詞除內部類外,類一般不具有static屬性。static的內部類的原因和特性還須要進一步學習。
六. Miscabstract, static, final是三個經常使用修飾詞。
這三個修飾詞中僅僅有static和final兩個修飾詞能夠組合在一起。
Java物件導向編程(二)