JAVA(十二)java面向對象6-抽象類和接口

JAVA(十二)java面向對象6-抽象類和接口


抽象類
當描述一個類的時候,如果不能確定功能函數如何定義,那麼該類就可以定義爲抽象類,功能函數應該描述爲抽象函數。

抽象類的實現方式
關鍵字abstract

abstract class Animal {
    String color;
    abstract void shout();
}

class Dog extends Animal {
    void shout() {
        System.out.println("旺旺");
    }
}

class Bird extends Animal {
    void shout() {
        System.out.println("嘰嘰喳喳");
    }
}

抽象類的特點
1.有抽象函數的類,該類一定是抽象類。
2.抽象類中不一定要有抽象函數。
3.抽象類不能使用new創建對象。(抽象類的方法,沒有方法體)
4.抽象類主要爲了提高代碼的複用性,讓子類繼承來使用。
5.編譯器強制子類實現抽象類父類的未實現的方法。(可以不實現,前提是子類的也要聲明爲抽象的。)

抽象的優點
1.提高代碼複用性。(強制子類實現父類中沒有實現的功能)
2.提高代碼的擴展性,便於後期的代碼維護

注意:
抽象類不能創建對象,那麼抽象類中是否有構造函數?
:抽象類中一定有構造函數。主要爲了初始化抽象類中的屬性。通常由子類實現。
final和abstract是否可以同時修飾一個類? (static,private.都不行)
:一定不能同時修飾


接口
interface:在java中的接口主要是用來拓展定義類的功能,這樣可以彌補java中單繼承的缺點。

接口的定義格式:

interface 接口名{
    屬性
    抽象方法
}

特點:
1.類實現接口可以通過implements實現,實現接口的時候必須把接口中的所有方法實現,一個類可以實現多個接口。
2.接口中定義的所有的屬性默認是public static final的,即靜態常量,既然是常量,那麼定義的時候必須賦值。
3.接口中定義的方法不能有方法體。接口中定義的方法默認添加public abstract
4.有抽象函數的不一定是抽象類,也可以是接口類。
5.由於接口中的方法默認都是抽象的,所以不能被實例化。
6.對於接口而言,可以使用子類來實現接口中未被實現的功能函數。
7.如果實現類中要訪問接口中的成員,不能使用super關鍵字。因爲兩者之間沒有顯示的繼承關係,況且接口中的成員成員屬性是靜態的。可以使用接口名直接訪問。
8.接口沒有構造方法。


抽象類與接口之間的區別
1.接口只能有public abstract方法,而抽象類的方法類型更多,可以有普通的方法。
2.接口中的成員變量默認是public static fianl類型的,抽象類的變量類型更多,可以有普通變量。
3.接口中不能含有靜態代碼塊。而抽象類可以有靜態代碼塊和靜態方法。
4.一個類可以繼承一個抽象類,而一個類卻可以實現多個接口。

在設計層面上的區別,我還並不能完全理解,這裏借用一下“燒麥鴕鳥”的說法:
1.抽象類是對事物的抽象(類的抽象),接口是對行爲的抽象。
2.抽象類是一種模板式設計,接口是一種行爲規範,一種輻射式設計。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章