什么是抽象類?
- 抽象類是對具體概念的抽象
- 抽象類本質是為了繼承 只能被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(){}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551278.html
標籤:其他
上一篇:Java8 教程_編程入門自學教程_菜鳥教程-免費教程分享
下一篇:返回列表
