温馨提示×

温馨提示×

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

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

抽象类构造方法干什么

发布时间:2026-09-18 23:30:05 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java(以及大多数支持“抽象类”的面向对象语言)里,抽象类虽然不能自己被实例化,但它依然可以有构造方法,而且构造方法主要不是为了“创建抽象类对象”,而是为了给子类用的。

下面分点说清楚它“干什么用”。


1️⃣ 抽象类构造方法的核心作用

✅ 给子类初始化“共性成员”

抽象类通常包含子类共有的属性或初始化逻辑,构造方法用来:

  • 初始化抽象类里的字段
  • 执行公共的初始化代码
  • 保证子类对象创建时状态是完整的

示例

abstract class Animal {
    String name;

    Animal(String name) {
        this.name = name;
        System.out.println("动物初始化");
    }

    abstract void sound();
}

class Dog extends Animal {
    Dog(String name) {
        super(name); // 调用抽象类构造方法
    }

    void sound() {
        System.out.println("汪汪");
    }
}

➡ Dog 创建时,先执行 Animal 的构造方法


2️⃣ 子类构造方法“必须”调用抽象类构造方法

  • 子类构造器第一行必须调用父类构造方法
  • 如果抽象类没有无参构造,子类必须显式 super(...)
abstract class A {
    A(int x) {}
}

class B extends A {
    B() {
        super(10); // 必须写
    }
}

3️⃣ 抽象类构造方法不能是 abstract 的

❌ 错误:

abstract class A {
    abstract A(); // 不允许
}

原因:

  • 构造方法不能被继承
  • 抽象方法没有实现,而构造方法必须实现

4️⃣ 抽象类构造方法常见使用场景

✅ 场景一:强制子类提供必要参数

abstract class Shape {
    Shape(String color) {
        if (color == null) throw new IllegalArgumentException();
    }
}

✅ 场景二:统一初始化逻辑

abstract class Service {
    Service() {
        initLogger();
    }
}

✅ 场景三:模板方法模式

abstract class Game {
    Game() {
        start();
        play();
        end();
    }
}

5️⃣ 一句话总结

抽象类的构造方法不是用来创建自己的对象,而是用来初始化“子类的共性部分”。

如果你愿意,我也可以用 UML图 / 对比接口 / 实际项目例子 再帮你讲一层。

向AI问一下细节

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

AI
助
手