前言
Java 是一种面向对象的编程语言,其中 抽象类 和 接口 是实现多态和设计模式中的重要工具。它们在编程中具有重要的地位,能够有效提高代码的灵活性和可维护性。尽管它们有一些相似之处,但在语法和应用场景上存在许多不同点。
一、什么是抽象类(Abstract Class)?
1. 抽象类的定义
抽象类是一个不能被实例化的类。它被用来作为其他类的基类,以提供一些通用的功能和属性,子类可以继承并实现其中的抽象方法。抽象类可以包含:
- 抽象方法:没有实现的方法,需要在子类中实现。
- 非抽象方法:已经实现的方法,子类可以直接继承或重写。
- 成员变量:用于存储数据的字段,可以有默认值。
- 构造函数:可以用于初始化抽象类中的成员变量。
2. 抽象类的语法
abstract class Animal {
String name;
// 抽象方法,没有实现
abstract void sound();
// 非抽象方法,有实现
void sleep() {
System.out.println(name + " is sleeping");
}
}
在这个例子中,Animal 类是一个抽象类,sound 是抽象方法,sleep 是普通方法。sound 方法没有具体实现,sleep 方法有具体的实现。
3. 抽象类的特点
- 抽象类不能实例化:不能直接创建抽象类的对象,只能创建其子类的对象。
- 可以包含抽象方法和普通方法:抽象类允许包含未实现的抽象方法,也可以包含已经实现的方法。
- 可以有构造函数:虽然不能实例化,但抽象类仍然可以有构造函数,用于初始化其成员变量。
- 可以有成员变量:和普通类一样,抽象类也可以有成员变量(字段)。
二、什么是接口(Interface)?
1. 接口的定义
接口是一种特殊的抽象类,它用于定义类应该遵循的行为(方法签名)。接口只包含常量和抽象方法的声明,不包含任何实现。一个类实现接口后,必须提供接口中所有方法的具体实现。接口常用于定义一些公共行为,不关心具体的实现方式。
2. 接口的语法
interface Animal {
// 所有方法默认是 public abstract
void sound();
;
}


