抽象類和抽象類的深入
抽象類
1、理解
抽象類(Abstract Class)是面向對象編程中的一個重要概念,尤其在像Java、C#和C++等編程語言中。抽象類是一種特殊的類,它不能被實例化(即不能創建抽象類的對象),但可以被其他類繼承。抽象類的主要目的是為子類提供一個公共的接口,并實現一些通用的方法或定義一些抽象方法(即只有方法簽名,沒有方法體)。
最簡單的理解:該類中的某個方法不好實現,就將該方法設置為抽象方法,該類就變成抽象類
抽象方法
- 沒有代碼塊,并且使用abstract修飾
- 抽象方法必須在抽象類中
- 交給非抽象的子類重寫
2、關鍵點
- 不能被實例化:因為抽象類是一種不完整的類(它可能包含抽象方法),所以你不能直接創建抽象類的對象。
- 可以包含抽象方法和非抽象方法:抽象方法是沒有方法體的方法,只有方法簽名。非抽象方法則包含完整的實現。
- 子類:一個抽象類可以有零個或多個子類。如果一個類繼承了一個抽象類,那么它必須提供該抽象類中所有抽象方法的實現(除非該子類也是抽象的)。
- 用途:抽象類通常用于定義一組相關的子類所共有的公共接口。通過繼承抽象類,子類可以共享一些通用的屬性和方法,并且只需要實現它們特有的部分。
3、使用
// 定義一個抽象類
abstract class Animal { // 抽象方法 abstract void makeSound(); // 非抽象方法 void eat() { System.out.println("The animal eats."); }
}
// 繼承抽象類的子類
class Dog extends Animal { // 實現從父類繼承的抽象方法 @Override void makeSound() { System.out.println("The dog barks."); }
} // 另一個繼承抽象類的子類
class Cat extends Animal { // 實現從父類繼承的抽象方法 @Override void makeSound() { System.out.println("The cat meows."); }
} // 在主類中測試
public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.eat(); // 調用非抽象方法 dog.makeSound(); // 調用抽象方法的實現 Cat cat = new Cat(); cat.eat(); // 調用非抽象方法 cat.makeSound(); // 調用抽象方法的實現 }
}
2、抽象類的深入
抽象類中只能有抽象方法?
抽象類中可以有構造方法、靜態方法、成員方法、抽象方法
抽象類中不可以沒有抽象方法?
如果父類是抽象類,則子類必須實現父類的抽象方法?
抽象類不能有構造方法?
可以使用new關鍵字來創建抽象類對象?
不能,創建的是匿名內部類的對象
1.抽象類中只能有抽象方法?抽象類中可以有構造方法、靜態方法、成員方法、抽象方法2.抽象類中不可以沒有抽象方法?可以,但是毫無意義3.如果父類是抽象類,則子類必須實現父類的抽象方法?不一定,子類如果是抽象類,可以不實現父類的抽象方法4.抽象類不能有構造方法?可以有5.可以使用new關鍵字來創建抽象類對象?不能,創建的是匿名內部類的對象