温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

抽象类能被实例化吗

发布时间:2026-08-30 20:33:06 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

抽象类不能被直接实例化

这是面向对象编程中的一个基本规则,下面以 Java 为例说明(C++、C# 等语言概念类似):

1️⃣ 为什么不能实例化?

抽象类通常包含 抽象方法(只有声明、没有实现),或者它本身被设计为“不完整”的模板。如果允许实例化,就会调用到没有实现的方法,这在语义和运行时都是不允许的。

abstract class Animal {
    abstract void speak();
}

下面的代码是 错误的

Animal a = new Animal(); // ❌ 编译错误

2️⃣ 但可以“间接实例化”

虽然不能直接 new 抽象类,但可以:

通过子类实例化

class Dog extends Animal {
    void speak() {
        System.out.println("Wang");
    }
}

Animal a = new Dog(); // ✅ 合法

此时:

  • 编译时类型是 Animal
  • 实际对象是 Dog
  • 调用的是子类实现的方法(多态)

3️⃣ 抽象类中可以有构造方法吗?

可以有构造方法
不能用来实例化抽象类本身

构造方法的作用是:

  • 被子类构造时调用(super()
  • 初始化抽象类中定义的成员
abstract class Animal {
    Animal() {
        System.out.println("Animal init");
    }
}

4️⃣ 总结一句话

抽象类不能直接实例化,但可以通过其非抽象子类实例化。

如果你愿意,我也可以对比说明:

  • 抽象类 vs 接口
  • Java 抽象类 vs C++ 抽象类
  • 抽象类在 Spring / 设计模式中怎么用
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI