Java子类调用父类构造器的应用场景

news/2025/2/24 1:14:50

在Java中,子类调用父类构造器的应用场景主要涉及到继承关系中的对象初始化。以下是几种常见的应用场景:

1. 初始化父类成员变量

当子类继承父类时,子类对象中包含父类的成员变量。为了确保这些父类成员变量被正确初始化,子类构造器需要调用父类构造器。如果父类没有无参构造器,子类必须显式调用父类的有参构造器。

示例:

java">class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }
}

class Teacher extends Person {
    private String skill;

    public Teacher(String name, String skill) {
        super(name);  // 调用父类的有参构造器
        this.skill = skill;
    }
}

在这个例子中,Teacher类的构造器通过super(name)调用了Person类的有参构造器,确保name属性被正确初始化14。

2. 避免重复代码

如果父类的构造器已经包含了一些初始化逻辑,子类可以通过调用父类构造器来复用这些逻辑,避免重复代码。

示例:

java">class Animal {
    private String type;

    public Animal(String type) {
        this.type = type;
    }
}

class Dog extends Animal {
    private String breed;

    public Dog(String type, String breed) {
        super(type);  // 复用父类的初始化逻辑
        this.breed = breed;
    }
}

在这个例子中,Dog类通过super(type)复用了Animal类的初始化逻辑13。

3. 构造器链

在Java中,构造器调用会形成一个链,直到Object类的构造器被调用。子类构造器调用父类构造器是这一过程的一部分,确保整个对象的所有部分都被正确初始化。

示例:

java">class Vehicle {
    public Vehicle() {
        System.out.println("Vehicle constructor");
    }
}

class Car extends Vehicle {
    public Car() {
        super();  // 调用父类构造器
        System.out.println("Car constructor");
    }
}

在这个例子中,Car类的构造器通过super()调用了Vehicle类的构造器,形成了构造器链15。

4. 设计模式中的应用

在某些设计模式中,如模板方法模式,父类定义了通用的初始化逻辑,子类通过调用父类构造器来复用这些逻辑,并在子类中添加特定的行为。

示例:

java">abstract class Game {
    public Game() {
        initialize();
    }

    protected abstract void initialize();
}

class Chess extends Game {
    public Chess() {
        super();  // 调用父类构造器
    }

    @Override
    protected void initialize() {
        System.out.println("Chess game initialized");
    }
}

在这个例子中,Chess类通过super()调用了Game类的构造器,复用父类的初始化逻辑56。

总结

子类调用父类构造器的应用场景主要包括初始化父类成员变量、避免重复代码、构造器链的形成以及设计模式中的应用。通过这些场景,可以确保对象的正确初始化和代码的复用性1345。


http://www.niftyadmin.cn/n/5863898.html

相关文章

下拉框的数据置为危险的‘删除‘状态时弹窗确认

<el-form-item label"删除标志" prop"delFlag"><el-select v-model"form.delFlag" placeholder"请选择删除标志" change"handleDelFlagChange"><el-option v-for"dict in dict.type.sys_ice_del_flag&q…

大数据学习之PB级音乐数据中心数仓综合项目(1)-理论知识和项目需求、歌曲热度与歌手热度排行

一、理论知识和项目需求 1.课程介绍 2.数据库与ER建模_数据库三范式 3.数据库与ER建模_ER实体关系模型 4.数据库与维度建模_数据仓库(DATA WAREHOUSE) 5.数据库与维度建模_数据库与数据仓库区别 6.数据库与维度建模_数据仓库的发展历程 7.数据库与维度建模_维度建模 8.数据库与…

【落羽的落羽 数据结构篇】栈和队列

文章目录 一、栈1. 概念2. 栈操作2.1 定义栈结构2.2 栈的初始化2.3 入栈2.4 出栈2.5 取栈顶元素 3. 栈的使用实例 二、队列1. 概念2. 队列操作2.1 定义队列结构2.2 入队列2.3 出队列2.4 销毁队列 三、用队列实现栈四、用栈实现队列 一、栈 1. 概念 栈&#xff08;stack&#…

【Java八股文】10-数据结构与算法面试篇

【Java八股文】10-数据结构与算法面试篇 数据结构与算法面试题数据结构红黑树说一下跳表说一下&#xff1f;LRU是什么&#xff1f;如何实现&#xff1f;布隆过滤器怎么设计&#xff1f;时间复杂度&#xff1f; 排序算法排序算法及空间复杂度 数据结构与算法面试题 数据结构 红…

在本地使用 Llama 3.2-Vision:分步指南

通过直观的用户界面或强大的端点服务&#xff0c;在本地与先进的多模态 Llama 模型进行交互。 Llama 3.2-Vision 是一个强大的多模态模型&#xff0c;能够处理文本和图像数据。它具有 110 亿&#xff08;11B&#xff09;和 900 亿&#xff08;90B&#xff09;参数规模&#xff…

答题卡识别阅卷系统(Matlab)

答题卡识别阅卷系统&#xff08;Matlab&#xff09; 【完整源码丨有GUI版本也有AppDesigner版本】 本系统答题卡识别主要算法&#xff1a; 图像预处理&#xff1a;包括灰度化、二值化、倾斜校正和滤波处理。 答题卡识别&#xff1a;通过灰度值统计和二值化判断填涂情况&#x…

【Python】pypinyin-汉字拼音转换工具

文章目录 1. 主要功能2. 安装3. 常用API3.1 拼音风格3.2 核心API3.2.1 pypinyin.pinyin()3.2.2 pypinyin.lazy_pinyin()3.2.3 pypinyin.load_single_dict()3.2.4 pypinyin.load_phrases_dict()3.2.5 pypinyin.slug() 3.3 注册新的拼音风格 4. 基本用法4.1 库导入4.2 基本汉字转…

设计心得——解耦的实现技术

一、说明 在前面的“设计心得——解耦”中&#xff0c;对解耦进行了高层次的抽象说明。本篇则对在实践中常用的解耦技术进行逐一分析说明&#xff0c;以期为开发者能更从理论到实践搭建一个桥梁。至于大家能够如何更好的在自己的项目中进行解耦的实践&#xff0c;就需要不断的…