【JAVA】Java基础—面向对象编程:继承—super 关键字的应用

一、super介绍

在Java编程中,super关键字用于引用父类的属性和方法。它是面向对象编程(OOP)中的一个重要特性,特别是在继承关系中。super关键字的主要用途包括:

  1. 调用父类构造方法:在子类的构造方法中,可以使用super()来调用父类的构造方法,以初始化父类的属性。

  2. 访问父类的属性和方法:当子类和父类有同名的属性或方法时,可以使用super来明确指向父类的成员。

重要性
  1. 清晰的代码结构:使用super可以明确区分父类和子类的成员,避免混淆,提高代码的可读性。

  2. 增强代码复用:通过调用父类的方法和构造方法,子类可以重用父类的功能,减少重复代码。

  3. 支持多态性:在多态的上下文中,super可以帮助我们访问父类的方法,实现不同的行为。

生活中的类比

可以将super关键字的使用比作家庭关系。在一个家庭中,孩子(子类)可以从父母(父类)那里继承特征和能力。比如,孩子可能有父母的某些特质(如眼睛颜色),但他们也可以有自己的特长(如音乐才能)。在这种情况下,super就像是孩子在需要的时候去问父母关于某些特质的来源。

二、super关键字的基本概念

1. 基本语法

在Java中,使用super关键字来访问父类的成员。基本语法如下:

class Parent {
    String name;

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

    public void display() {
        System.out.println("Parent name: " + name);
    }
}

class Child extends Parent {
    String name;

    public Child(String parentName, String childName) {
        super(parentName); // 调用父类构造方法
        this.name = childName; // 初始化子类属性
    }

    public void display() {
        super.display(); // 调用父类方法
        System.out.println("Child name: " + name);
    }
}

三、super关键字的应用示例

示例 1:调用父类构造方法

示例代码

// 父类
class Animal {
    String type;

    // 父类构造方法
    public Animal(String type) {
        this.type = type;
    }

    public void display() {
        System.out.println("Animal type: " + type);
    }
}

// 子类
class Dog extends Animal {
    String name;

    // 子类构造方法
    public Dog(String type, String name) {
        super(type); // 调用父类构造方法
        this.name = name; // 初始化子类属性
    }

    public void display() {
        super.display(); // 调用父类方法
        System.out.println("Dog name: " + name);
    }
}

// 主类
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Mammal", "Buddy"); // 创建子类对象
        dog.display(); // 调用子类方法
    }
}

代码解释

  1. **父类 Animal**:

    • 定义了一个属性type(动物类型)。

    • 构造方法用于初始化type属性。

    • display()方法用于输出动物类型。

  2. **子类 Dog**:

    • 使用extends关键字继承Animal类。

    • 在构造方法中,使用super(type)调用父类构造方法,以初始化父类的type属性。

    • 添加了一个特有属性name(狗的名字)。

    • 重写了display()方法,调用父类的display()方法并输出狗的名字。

  3. **主类 Main**:

    • 创建Dog类的对象dog,并调用display()方法,展示了动物的类型和狗的名字。

示例 2:访问父类的属性和方法

示例代码

// 父类
class Vehicle {
    String brand;

    public Vehicle(String brand) {
        this.brand = brand;
    }

    public void displayBrand() {
        System.out.println("Vehicle brand: " + brand);
    }
}

// 子类
class Car extends Vehicle {
    String model;

    public Car(String brand, String model) {
        super(brand); // 调用父类构造方法
        this.model = model; // 初始化子类属性
    }

    public void displayDetails() {
        super.displayBrand(); // 调用父类方法
        System.out.println("Car model: " + model);
    }
}

// 主类
public class Main {
    public static void main(String[] args) {
        Car car = new Car("Toyota", "Camry"); // 创建子类对象
        car.displayDetails(); // 调用子类方法
    }
}

代码解释

  1. **父类 Vehicle**:

    • 定义了一个属性brand(车辆品牌)。

    • 构造方法用于初始化brand属性。

    • displayBrand()方法用于输出车辆品牌。

  2. **子类 Car**:

    • 使用extends关键字继承Vehicle类。

    • 在构造方法中,使用super(brand)调用父类构造方法,以初始化父类的brand属性。

    • 添加了一个特有属性model(车型)。

    • 定义了displayDetails()方法,调用父类的displayBrand()方法并输出车型。

  3. **主类 Main**:

    • 创建Car类的对象car,并调用displayDetails()方法,展示了车辆的品牌和车型。

四、super关键字的特点

  1. 调用父类构造方法:在子类构造方法中,必须在第一行使用super()来调用父类的构造方法(如果不显式调用,Java会自动调用无参构造方法)。

  2. 访问父类成员:可以使用super关键字来访问父类的属性和方法,尤其是在子类中存在同名成员时。

  3. 不能在静态上下文中使用super关键字只能在实例方法或构造方法中使用,不能在静态方法中使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915827.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity使用PS合并贴图

前言 使用PBR渲染,金属工作流时,默认使用一个金属度贴图,其中r通道保存金属度,a通道保存光滑度,g通道和b通道没使用; 我们很可能使用Occlusion Map,使用其中的g通道保存Occlusion 信息。单独使用…

Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常

组件,可通过nuget安装,直接搜名字: ExcelDataReader using ConsoleAppReadFileData.Model; using ExcelDataReader; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task…

Qt_day4_Qt_UI设计

目录 Qt_UI设计 1. Designer 设计师(掌握) 2. Layout 布局(重点) 2.1 基本使用 2.2 高级用法 2.3 代码布局(了解) 3. Designer与C的关系(熟悉) 4. 基本组件(掌握…

Axure网络短剧APP端原型图,竖屏微剧视频模版40页

作品概况 页面数量:共 40 页 使用软件:Axure RP 9 及以上,非软件无源码 适用领域:短剧、微短剧、竖屏视频 作品特色 本作品为网络短剧APP的Axure原型设计图,定位属于免费短剧软件,类似红果短剧、河马剧场…

网安加·百家讲坛 | 仝辉:金融机构鸿蒙应用安全合规建设方案

作者简介:仝辉,北京娜迦信息科技发展有限公司攻防安全负责人,深耕移动应用安全领域十余年,获得过CISP、CISSP、OSCP、PMP、CCRC-CIASW等相关证书,参与多项移动应用安全标准起草,参与华为、平安集团、中国移…

C语言 strlen 函数 - C语言零基础入门教程

目录 一.strlen 函数简介二.strlen 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.strlen 函数简介 在C 语言中,char 字符串也是一种非常重要的数据类型,我们可以使用 strlen 函数获取字符串长度;…

OceanStor Pacific系列 8.1.0 功能架构

功能架构 华为OceanStor Pacific系列提供基于三层的分布式存储架构,融合分布式文件、对象、大数据和块多个服务形态,支持文件、对象、大数据服务部署在一个集群,并统一管理。 华为OceanStor Pacific系列整体功能架构由存储接口层、存储服务…

Simulink中Matlab function使用全局变量

目录 一. 引言二. 普通Matlab function使用全局变量三. Simulink中的Matlab function使用全局变量四. 如何利用Matlab function的全局变量施加随机噪声 一. 引言 最近发现了之前仿真中的一个问题,记录一下备忘。 Matlab function中有时候需要用到全局变量&#xf…

react-markdown内容宽度溢出和换行不生效问题

情景复现: 解决办法,添加样式进行限制 /* index.css */ .markdown-container {word-break: break-word; /* 强制长单词断行 */white-space: pre-wrap; /* 保留空白符序列,但是正常地进行换行 */overflow-wrap: break-word; /* 在长单词或…

【C#设计模式(10)——装饰器模式(Decorator Pattern)】

前言 装饰器模式可以在运行时为对象添加额外的功,而无需修改原始对象的代码。这种方式比继承更加灵活。 代码 //蛋糕类(抽象类) public abstract class Cake {public abstract void Create(); } //奶油蛋糕类 public class CreamCake : Cak…

Diffusion Transformer模型结构解析(DiT、SD3、Flux)

Diffusion Transformer模型结构解析(DiT、SD3、Flux) 本文将通过 DiT、SD3、Flux 三个 DiT 相关工作,介绍 Diffusion 中的 Transformer 结构的应用与演进。注意 SD3 和 Flux 采用的 Flow Matching 的扩散模型形式化当然是很关键的改进&#…

给阿里云OSS绑定域名并启用SSL

为什么要这么做? 问题描述: 当用户通过 OSS 域名访问文件时,OSS 会在响应头中增加 Content-Disposition: attachment 和 x-oss-force-download: true,导致文件被强制下载而不是预览。这个问题特别影响在 2022/10/09 之后新开通 OS…

如何找到系统中bert-base-uncased默认安装位置

问题: 服务器中无法连接huggingface,故需要自己将模型文件上传 ubuntu 可以按照这个链接下载 Bert下载和使用(以bert-base-uncased为例) - 会自愈的哈士奇 - 博客园 里面提供了giehub里面的链接 GitHub - google-research/be…

【算法】区间DP

基本内容 [!NOte] 通过分治的思想实现DP数组 入门例子 NOI1995] 石子合并 - 洛谷 | 计算机科学教育新生态 题目要求:给定一圈石头数组,每个石头对应一个权重值,当两个石头合并时组成一个小石头堆,成本为两个石头权重值相加&#x…

机器学习—决定下一步做什么

现在已经看到了很多不同的学习算法,包括线性回归、逻辑回归甚至深度学习或神经网络。 关于如何构建机器学习系统的一些建议 假设你已经实现了正则化线性回归来预测房价,所以你有通常的学习算法的成本函数平方误差加上这个正则化项,但是如果…

第二十周机器学习笔记:初步认识PINN

第二十周周报 摘要Abstract一、初步认识物理信息神经网络(PINN)1.PINN的基本概念2. PINN与传统机器学习的区别3.构建PINN的步骤 二、代码实战——比较RNN、LSTM、Transformer在股市预测的表现1.RNN在股市预测中的表现2.LSTM在股市预测中的表现3.Transfor…

数据结构的时间复杂度和空间复杂度

目录 时间复杂度 空间复杂度 时间复杂度 基本操作的执行次数,为时间复杂度。 我们使用大O的渐进表示法来表示时间复杂度。 怎么使用? 先看例子: 在这个例子中, 基本操作为变量 count 的 加加 操作,并且,执行…

SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…

Mac 使用mac 原生工具将mp4视频文件提取其中的 mp3 音频文件

简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研 学习经验:扎实基础 + 多做笔…

多模态与大模型技术赋能企业数据资产平台建设

文章目录 一、政策背景分析二、企业数据资产运营平台架构思路三、统一多模技术赋能企业数据底座建设四、大模型助力数据资产管理降本增效五、典型案例分享 一、政策背景分析 2023年10月,国家数据局正式挂牌,负责协调推进数据基础制度建设,并…