抽象类不能被实例化,主要是因为它在语义和设计上是不完整的,用来被继承而不是用来直接创建对象。下面从几个角度解释:
抽象类中通常包含 抽象方法(只有方法声明,没有实现):
abstract class Animal {
abstract void speak(); // 没有方法体
}
如果允许实例化:
Animal a = new Animal(); // 如果允许
a.speak(); // 调用什么?
此时 speak() 根本没有实现,调用它是没有意义的,因此 Java 直接禁止这样做。
抽象类的设计目的不是单独使用,而是:
例如:
abstract class Shape {
abstract double area();
}
子类必须实现 area():
class Circle extends Shape {
double area() {
return Math.PI * r * r;
}
}
✅ 抽象类 定义规则
✅ 子类 负责实现
抽象类表达的是:
“这是一个概念,不是具体事物”
例如:
Animal 是抽象概念Dog、Cat 才是具体对象你不能说:
“给我一个动物(Animal)”
但你可以说:
“给我一条狗(Dog)”
| 类型 | 能否实例化 | 说明 |
|---|---|---|
| 具体类 | ✅ 可以 | 方法都有实现 |
| 抽象类 | ❌ 不可以 | 可能包含未实现的方法 |
| 接口 | ❌ 不可以 | 完全抽象(Java 8 前) |
虽然抽象类不能 new,但可以:
Animal a = new Animal() {
void speak() {
System.out.println("Hi");
}
};
这不是实例化抽象类,而是:
创建了一个 匿名子类对象
抽象类不能被实例化,是因为它本身不完整,只能作为父类被继承,由子类提供具体实现。
如果你愿意,我也可以用 JVM 层面 或 面试题角度 再帮你总结一版。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。