在Java中,抽象类和接口都是用来定义类的蓝图或模板,但它们在使用上有一些关键的区别。
一、抽象类(Abstract Class)
- 关键字:使用
abstract
关键字定义。 - 可以包含的成员:
- 可以有具体的方法(有方法体),也可以有抽象的方法(没有方法体)。
- 可以包含构造函数。
- 可以有字段(成员变量)。
- 继承:
- 一个类只能继承一个抽象类(单继承),但可以实现多个接口。
- 用例:适合于类之间有“is-a”(是一种)关系的场景,即共享一些实现细节和状态。
示例:
abstract class Animal {
abstract void makeSound(); // 抽象方法
void sleep() { // 具体方法
System.out.println("Sleeping...");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Bark");
}
}