教程簡介 Java 8 (又稱為 jdk 1.8) 是 Java 語言開發的一個主要版本。 Java 8 是oracle公司於2014年3月發佈,可以看成是自Java 5 以來最具革命性的版本。Java 8為Java語言、編譯器、類庫、開發工具與JVM帶來了大量新特性。 Java 8入門教程 - 從 ...
什麼是抽象類?
- 抽象類是對具體概念的抽象
- 抽象類本質是為了繼承 只能被public或預設修飾
- 行為層面抽象出來抽象方法
抽象類的註意事項
- 抽象類不可以被直接實例化
- 抽象類中可以存在構造方法
- 抽象類可以存在普通方法
抽象方法的註意
- 抽象方法必須定義在抽象類中
- 僅聲明 實現需要交給子類
- 抽象方法不能用private修飾
//如何聲明
abstract void func();
什麼是介面?
- 介面是一種規範
public interface inter{
//聲明方法和變數
public abstract void func();//預設public abstract修飾
int a=2; //預設public final static修飾 必須賦值操作
defult void func1(){
//default修飾可以實現方法
}
static void func2(){
//static修飾可以實現方法
}
}
語法層面的差別
- 抽象類能夠提供成員方法的實現細節。而介面中僅僅能存在 public abstract (可省) 方法;
- 抽象類中的成員變數能夠是各種類型的,而介面中的成員變數僅僅能是 public static final (可省) 類型的;
- 一個類僅僅能繼承一個抽象類,而一個類卻能夠實現多個介面
- 抽象類的抽象程式介於類和介面之間
設計層面的差別
- 抽象是對類抽象 介面是對行為抽象
- 抽象類繼承之間是'is not is'關係 介面是'has not has'關係
- 抽象類可作為父類 屬於模板式設計 介面是一種行為規範 輻射式設計
- 縱向延申使用抽象類 橫向擴展使用介面
引申例子說明
需求 門有open和close功能 要求門具有alarm功能 怎麼實現
abstract class Door{
abstract void open();
abstract void close();
}
//或者
interface Door{
void open();
void close();
}
- 火警器功能增加在抽象類中 可是不是所有門都有火警器功能!
- 火警器功能增加在介面中 可是不是所有門都有火警器功能!
門的基本功能是open close 屬於固有的特性 但是火警器功能是附加功能或者叫延申特性 因此最好的解決的方法是單獨將報警設計為一個介面,包括alarm()行為,Door設計為單獨的一個抽象類,包括open和close兩種行為。再設計一個報警門繼承Door類和實現Alarm介面
interface Alram{
void alram();
}
abstract class Door{
abstract void open();
abstract void close();
}
class AlramDoor extends Door,implement Alram{
void open(){}
void close(){}
void alram(){}
}