在面向对象编程(如 Java、C# 等)中,**抽象类(Abstract Class)和接口(Interface)**都用于实现抽象和多态,但它们在设计目的、使用方式和语法限制上有明显区别。
| 对比维度 | 抽象类(Abstract Class) | 接口(Interface) |
|---|---|---|
| 设计目的 | 表示“是什么”(is-a 关系) | 表示“能做什么”(can-do 能力) |
| 继承方式 | 单继承(一个类只能继承一个抽象类) | 多实现(一个类可实现多个接口) |
| 成员变量 | 可以有普通变量、常量 | 一般只有常量(Java 8 前) |
| 构造方法 | 有构造方法(不能直接实例化) | 没有构造方法 |
| 方法实现 | 可以有抽象方法和具体方法 | Java 8 前只能抽象方法,之后可有 default / static 方法 |
| 访问修饰符 | 方法可使用任意访问修饰符 | 默认 public(Java 中) |
| 适用场景 | 代码复用、共性抽取 | 规范行为、解耦、扩展能力 |
适合场景:
示例(Java):
abstract class Animal {
String name;
abstract void sound();
void eat() {
System.out.println("吃东西");
}
}
适合场景:
示例(Java):
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
一个类可以同时:
class Duck implements Flyable, Swimmable {
public void fly() {}
public void swim() {}
}
抽象类解决“共性复用”,接口解决“行为规范与扩展”。
如果你愿意,我也可以用 Python / C++ / 实际项目例子 来对比说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。