抽象類

先上代碼,再解釋設計模式

abstract class Animal{
    abstract void say();
}
public class Cat extends Animal{
    public Cat(){
        System.out.printf("I am a cat");//由於沒有定義爲抽象類,因此必須實現父類的抽象方法,編譯就報錯了
    }
    public static void main(String[] args) {
        Cat cat=new Cat();
    }
}

包含抽象方法的類稱爲抽象類,但並不意味着抽象類中只能有抽象方法,它和普通類同樣,一樣能夠擁有成員變量和普通的成員方法。注意,抽象類和普通類的主要有三點區別:架構

1)抽象方法必須爲public或者protected(由於若是爲private,則不能被子類繼承,子類便沒法實現該方法),缺省狀況下默認爲publicspa

2)抽象類不能用來建立對象架構設計

3)若是一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。若是子類沒有實現父類的抽象方法,則必須將子類也定義爲爲abstract類。設計

在其餘方面,抽象類和普通的類並無區別。日誌

 

 

抽象類與接口有什麼區別?code

接口(interface)能夠說成是抽象類的一種特例,接口中的全部方法都必須是抽象的。接口中的方法定義默認爲public abstract類型,接口中的成員變量類型默認爲public static final。另外,接口和抽象類在方法上有區別:    
1.抽象類能夠有構造方法,接口中不能有構造方法。  
2.抽象類中能夠包含非抽象的普通方法,接口中的全部方法必須都是抽象的,不能有非抽象的普通方法。
3.抽象類中能夠有普通成員變量,接口中沒有普通成員變量 
4. 抽象類中的抽象方法的訪問類型能夠是public,protected和默認類型
5. 抽象類中能夠包含靜態方法,接口中不能包含靜態方法
6. 抽象類和接口中均可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型能夠任意,但接口中定義的變量只能是public static final類型,而且默認即爲public static final類型
7. 一個類能夠實現多個接口,但只能繼承一個抽象類。兩者在應用方面也有必定的區別:接口更多的是在系統架構設計方法發揮做用,主要用於定義模塊之間的通訊契 約。而抽象類在代碼實現方面發揮做用,能夠實現代碼的重用,例如,模板方法設計模式是抽象類的一個典型應用,假設某個項目的全部Servlet類都要用相 同的方式進行權限判斷、記錄訪問日誌和處理異常,那麼就能夠定義一個抽象的基類,讓全部的Servlet都繼承這個抽象基類,在抽象基類的service 方法中完成權限判斷、記錄訪問日誌和處理異常的代碼,在各個子類中只是完成各自的業務邏輯代碼
相關文章
相關標籤/搜索