概述
用於描述一個模糊的特征。有時一個類中的一些方法細節不確定,我們就可以用抽象的概念去定義。
定義格式
使用abstract關鍵字修飾
//定義抽象類Person
abstract class Person {
//定義抽象方法sleep
abstract void sleep();
}
抽象方法定義注意事項
- 抽象方法沒有方法體,定義時沒有"{}",小括號后直接跟";"。
- 一個類中含有抽象方法,該類必須為抽象類。
- 抽象類中可以不定義任何抽象方法。
抽象類和普通類的區別:
- 抽象類必須使用public修飾(如果被final、private修飾,子類無法繼承,也就無法實現抽象方法)。
- 抽象類默認權限修飾符為public。
- 抽象類不可以使用new關鍵字創建對象,但子類創建對象時,抽象父類也會被JVM實例化。
- 抽象父類的子類,必須重寫所有抽象方法。如果抽象類的子類含有未實現的抽象方法,子類也必須為抽象類。
- 抽象類也可以有構造方法,與普通父類一樣,當子類實例化時被調用。
用代碼展示一個例子:
創建抽象類,包含一個抽象方法和普通方法。
abstract class Person {
public abstract void sleep();
public void eat(){
System.out.println("要吃飯...");
}
}
創建類繼承抽象類,抽象類中的非抽象方法可以不重寫。
public class Student extends Person{
String name;
public Student(){}
public Student(String name){
this.name = name;
}
public void sleep(){
System.out.println(name+"要睡覺..");
}//注意,抽象類的子類必須重寫抽象類中的抽象方法
}
抽象類不能被實例化,要想調用抽象類中的方法必須創建抽象類的子類。
程序入口代碼如下:
public static void main(String[] args) {
Student stu1 = new Student("熊大");
stu1.eat();
stu1.sleep();
}
運行結果如下:
要吃飯...
熊大要睡覺..
可以看出,通過實例化子類,子類對象可以直接調用抽象父類的普通方法,也可以調用抽象父類中重寫的抽象方法。
