普通类(Concrete Class)
普通类是完全实现的类,它可以有属性和方法,也可以包含构造函数等。普通类可以直接被实例化,用于创建对象。一个普通类可以继承自另一个类,并且可以实现多个接口。
public class Animal {
// 属性
private String name;
// 构造器
public Animal(String name) {
this.name = name;
}
// 方法
public void eat() {
System.out.println(name + " is eating.");
}
}
接口(Interface)
接口是一种特殊的抽象类,它只能包含抽象方法(默认为<font style="color:rgb(44, 44, 54);">public abstract</font>)和常量(默认为<font style="color:rgb(44, 44, 54);">public static final</font>)。从Java 8开始,接口可以包含默认方法和静态方法。接口主要用于定义一组行为或能力,不提供具体的实现。一个类可以通过实现接口来表明它支持这些行为或能力。
public interface Flyable {
// 默认方法
default void takeOff() {
System.out.println("Taking off...");
}
// 抽象方法
void fly();
public void create();
public abstarct void delete();
// 静态方法
static void land() {
System.out.println("Landing...");
}
}
抽象类(Abstract Class)
抽象类是可以包含抽象方法(没有具体实现的方法)和具体方法(有具体实现的方法)的类。抽象类不能被实例化,但是可以被继承。子类必须实现所有未实现的抽象方法,除非子类也是抽象的。抽象类通常用来表示一种通用类型或者作为其他类的基础。
public abstract class Vehicle {
// 抽象方法
public abstract void startEngine();
// 具体方法
public void stopEngine() {
System.out.println("Engine stopped.");
}
}
总结
| 特性/类型 | 普通类 | 接口 | 抽象类 |
|---|---|---|---|
| 直接实例化 | 可以 | 不可以 | 不可以 |
| 包含抽象方法 | 不可以 | 可以 | 可以 |
| 包含具体方法 | 可以 | Java 8+ 可以 (default, static) | 可以 |
| 多重继承 | 不可以 | 可以 (通过实现多个接口) | 不可以 |
| 定义行为 | 可以 | 主要用于定义行为 | 可以 |
| 实现细节 | 提供完整的实现 | 不提供实现细节 | 可以提供部分实现 |