抽象類(lèi)是一種不能被實(shí)例化的類(lèi),它的主要作用是用于被其他類(lèi)繼承。抽象類(lèi)可以包含抽象方法和非抽象方法,而抽象方法必須被子類(lèi)實(shí)現(xiàn)。通常情況下,抽象類(lèi)用于定義一些通用的行為或?qū)傩?,具體的實(shí)現(xiàn)則由子類(lèi)來(lái)完成。
在 Java 中,可以通過(guò)使用 abstract 關(guān)鍵字來(lái)定義抽象類(lèi)。抽象類(lèi)的定義方式與普通類(lèi)類(lèi)似,但需要在類(lèi)名前加上 abstract 關(guān)鍵字,如下所示:
public abstract class Animal {
// 抽象方法
public abstract void move();
// 非抽象方法
public void sleep() {
System.out.println("睡覺(jué)");
}
}
在上面的代碼中,我們定義了一個(gè)名為 Animal 的抽象類(lèi),包含一個(gè)抽象方法 move() 和一個(gè)非抽象方法 sleep()。抽象方法沒(méi)有方法體,只有方法簽名,用于指定方法的名稱(chēng)、參數(shù)列表和返回值類(lèi)型。而非抽象方法則包含了方法體,可以直接在方法中編寫(xiě)代碼。
需要注意的是,如果一個(gè)類(lèi)包含了抽象方法,那么該類(lèi)必須也是抽象類(lèi)。抽象類(lèi)不能被實(shí)例化,但可以被子類(lèi)繼承。子類(lèi)必須實(shí)現(xiàn)父類(lèi)中的所有抽象方法,否則子類(lèi)也必須被定義為抽象類(lèi)。
以下是一個(gè)示例代碼,演示了如何繼承抽象類(lèi)并實(shí)現(xiàn)其中的抽象方法:
public class Cat extends Animal {
// 實(shí)現(xiàn)抽象方法
public void move() {
System.out.println("跑步");
}
// 重寫(xiě)父類(lèi)方法
public void sleep() {
System.out.println("打盹");
}
}
在上面的代碼中,我們定義了一個(gè)名為 Cat 的類(lèi),它繼承了 Animal 抽象類(lèi),并實(shí)現(xiàn)了其中的抽象方法 move()。同時(shí),我們重寫(xiě)了父類(lèi)中的 sleep() 方法,用于改變其行為。現(xiàn)在,Cat 類(lèi)可以被實(shí)例化并調(diào)用其中的方法。