抽象类不能被直接实例化。
这是面向对象编程中的一个基本规则,下面以 Java 为例说明(C++、C# 等语言概念类似):
抽象类通常包含 抽象方法(只有声明、没有实现),或者它本身被设计为“不完整”的模板。如果允许实例化,就会调用到没有实现的方法,这在语义和运行时都是不允许的。
abstract class Animal {
abstract void speak();
}
下面的代码是 错误的:
Animal a = new Animal(); // ❌ 编译错误
虽然不能直接 new 抽象类,但可以:
✅ 通过子类实例化
class Dog extends Animal {
void speak() {
System.out.println("Wang");
}
}
Animal a = new Dog(); // ✅ 合法
此时:
AnimalDog✅ 可以有构造方法
❌ 不能用来实例化抽象类本身
构造方法的作用是:
super())abstract class Animal {
Animal() {
System.out.println("Animal init");
}
}
抽象类不能直接实例化,但可以通过其非抽象子类实例化。
如果你愿意,我也可以对比说明:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。