抽象類前使用abstract關鍵字修飾,則該類為抽象類
抽象的方法是不完全的,它只是一個方法簽名而完全沒有方法體
抽象的方法沒有花括號
繼承抽象類的子類必須覆蓋父類的抽象函數(即:子類繼承抽象類以后,抽象類里面所有的抽象函數都必須要被子類所實現),否則這個類自己就成為抽象類
應用:
- 在某種情況下,某個父類只知道子類應該包含什么方法,但無法准確地知道子類如何實現這些方法
- 從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性
目的/作用:不關注子類的實現,但會約束子類,必須有哪類特征 /限制規定子類必須實現某種方法,但不關注實現細節
使用規則:
- abstract定義抽象類
- abstract定義抽象方法,只聲明,不需要實現
- 包含抽象方法的類就是抽象類 (即:如果自身聲明了一個抽象方法,這個類必須是抽象類)
- 抽象類中可以包含普通方法,也可以沒有抽象方法
- 抽象類不能直接創建,定義一個引用變量指向一個子類的對象
例:
abstract class Telphone{ //此父類只是用來約束子類,所以可以定義成抽象類
public abstract void call(); //在抽象類里若想要約束子類,就可定義為抽象方法 抽象方法沒有方法體以分號結束
public abstract void message();
}
class Cellphone extends Telphone{
public void call(){ //實現抽象類里要求的方法call
System.out.println("通過鍵盤來打電話");
}
public void message(){ //實現抽象類里要求的方法message
System.out.println("通過鍵盤來發短信");
}
}
class Smartphone extends Telphone{
public void call(){
System.out.println("通過語音來打電話");
}
public void message(){
System.out.println("通過語音來發短信");
}
}
class Ex17{
public static void main(String[] args){
Telphone tel1=new Cellphone(); //抽象類的父類引用指向一個子類對象,先創建一個普通的電話的對象
tel1.call(); //通過引用就可以打電話
tel1.message(); //通過引用就可以發短信
Telphone tel2=new Smartphone(); //通過父類的引用指向智能手機的對象
tel2.call();
tel2.message();
}
}