標籤:
抽象的概念就是抽象出共同屬性:成員變數和方法
定義抽象使用abstract關鍵字定義抽象類別和方法
抽象類別 abstract class
包含抽象方法的類,叫抽象類別。
所以抽象類別可以有private等多種許可權的成員變數和非abstract的成員方法。當然抽象方法是一定要有的。
抽象類別是用於單一繼承的,不能執行個體化。
而繼承類一定要實現抽象方法,因為抽象方法在抽象類別裡是沒有實現行為的,存取權限只能是public。而非抽象方法則可以賦予方法的預設行為,存取權限可以多種,但需要考慮非抽象方法是否需要被繼承類訪問。
介面 interface
介面,用於多重繼承,也不能執行個體化。只能包含static final的成員變數,不過在interface中一般不定義成員變數。而成員方法在介面裡只能是抽象方法,存取權限只能是public。
所以,無論抽象類別還是介面,抽象方法都需要在子類中實現,而且在子類中實現這些方法一個都不能少。而抽象類別裡面的非抽象方法,則在子類可以不重寫實現裡面的行為
public class Child extends Children implements Lover{ public Child(String name) { super(name); } public void printName() { System.out.println(super.getName()); } public void love(String name) { System.out.println(name + ", I love you!"); } public static void main(String[] args) { Child boy = new Child("Charley"); System.out.println(boy.getName()); Child girl = new Child("Queenie"); girl.printName(); boy.love(girl.getName()); girl.love(boy.getName()); } } abstract class Children { private String name; public Children(String name) { this.name = name; } //private then Child obj can not access this method //private String getName() { public String getName() { return name; } abstract void printName(); //haha()在子類中沒有被實現 //abstract void haha(); } interface Lover{ void love(String name); }
Java介面和Java抽象類別的區別
1,抽象類別裡可以有構造方法,而介面內不能有構造方法。 2,抽象類別中可以有普通成員變數,而介面中不能有普通成員變數。
public String pas ;//介面中定義會報錯
3,抽象類別中可以包含非抽象的普通方法,而介面中所有的方法必須是抽象的,不能有非抽象的普通方法。 4,抽象類別中的抽象方法的訪問類型可以是public ,protected和預設類型,但介面中的抽象方法只能是public類型的,並且預設即為public abstract類型。 5,抽象類別中可以包含靜態方法,介面內不能包含靜態方法。 6,抽象類別和介面中都可以包含靜態成員變數,抽象類別中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是public static類型,並且預設為public static類型。 7,一個類可以實現多個介面,但只能繼承一個抽象類別。
在應用上的區別:
介面更多的是在系統架構設計方法發揮作用,主要定義模組之間的通訊,而抽象類別在代碼實現方面發揮作用,可以實現代碼的重用
Java基礎-四要素之一《抽象》(介面)