抽象类(Abstract Class)和具体类(Concrete Class)是面向对象编程中两个重要概念,主要区别体现在是否完整、能否实例化、设计目的等方面。下面从多个角度进行说明,并给出示例(以 Java 为例,其他语言如 C++、C# 类似)。
| 对比点 | 抽象类 | 具体类 |
|---|---|---|
| 是否完整 | 不完整(可能包含抽象方法) | 完整(所有方法都有实现) |
| 能否实例化 | ❌ 不能 | ✅ 可以 |
| 是否包含抽象方法 | ✅ 可以 | ❌ 不可以 |
| 主要用途 | 定义模板、规范、共性 | 直接描述具体事物 |
| 是否能被继承 | ✅ 可以 | ✅ 可以 |
| 是否必须被继承 | 通常是 | 不一定 |
抽象类是用 abstract 修饰的类,用来表示**“某类事物的抽象概念”**,而不是具体对象。
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
// 抽象方法
public abstract void sound();
// 具体方法
public void eat() {
System.out.println(name + "在吃东西");
}
}
抽象类不能直接使用:
// Animal a = new Animal("动物"); ❌ 编译错误
具体类是实现了所有方法、可以直接使用的类。
class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void sound() {
System.out.println(name + "在汪汪叫");
}
}
使用:
Animal dog = new Dog("小狗");
dog.sound(); // 小狗在汪汪叫
dog.eat();
| 抽象类 | 具体类 |
|---|---|
| 车(概念) | 宝马、奔驰 |
| 形状 | 圆形、矩形 |
| 员工 | 程序员、产品经理 |
抽象类不能直接实例化,可能包含抽象方法,用于定义子类的公共规范;
具体类可以被实例化,所有方法都有实现,用于描述具体对象。
抽象类侧重抽象和继承,具体类侧重直接使用。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。