2013年12月12日 星期四

[JAVA]abstract class v.s. interface

abstract class 和 interface 的區別

abstract class的特徵:
1. abstract class和abstract method都必須用abstract關鍵字來修飾
2. abstract class不能用new關鍵字去產生物件
3. abstract method只需要宣告, 不需要實作
4. 繼承abstract class的子類別必須實作父類別的abstract method, 否則這子類別還是個abstract class

interface的特徵:
1. interface沒有建構方法 (即method中沒有參數, 且沒有任何變數的設定)
     Ex: interface Bus{
                void sound();
           }
2. interface中所有資料成員都必須初始化, 且均為常數
3. 宣告變數必須是final, static和public
4. interface中的method必須為abstact或public


 abstract class 和 interface 的使用時機

何謂abstract class?

提供一種多個class一起合作工作的方式, 將多個class中相同的元素pull up method到public class中, 再以繼承的方式來使用它, 目的是為了實現"多型"精神


何謂interface?

即spec., 完全不需要定義實作, 只需要函式原型
若要實作interface, 就必須follow它的spec. 

[public] [abstract] interface 介面名稱{
    權限設定  傳回型態  method(parameters); 
    權限設定  傳回型態  method(parameters); 

[public] [abstract]是預設, 所以可省略, 因為interface本身就是抽象的


(註)一個介面可以同時繼承多個介面, 即同時繼承了多個介面的abstract method和常數

 => interface A extends 介面1, 介面2, 介面3, ... 

一個class可以同時實作多個interface
 => class B implements 介面1, 介面2, 介面3, ... 

沒有留言: