掌握Java中的super关键字

super 是 Java 中的一个关键字,它在继承的上下文中特别有用。super 引用了当前对象的直接父类,它可以用来访问父类中的属性、方法和构造函数。以下是 super 的几个主要用途:

1. 调用父类的构造函数

在子类的构造函数中,你可以使用 super 来调用父类的构造函数。这通常在子类构造函数的第一行完成,以确保父类的属性被正确初始化。

class Parent {
    Parent(String name) {
        System.out.println("Parent constructor called with name: " + name);
    }
}

class Child extends Parent {
    Child(String name, int age) {
        super(name); // 调用父类的构造函数
        System.out.println("Child constructor called with age: " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child("Alice", 10);
    }
}

在这个例子中,Child 类的构造函数通过 super(name) 调用了 Parent 类的构造函数,并传递了一个 name 参数。

2. 访问父类的成员

在子类中,如果你想要引用父类的属性或方法,可以使用 super 关键字。

class Parent {
    String name = "Parent";
    
    void printName() {
        System.out.println("Name in Parent: " + name);
    }
}

class Child extends Parent {
    String name = "Child";
    
    void printName() {
        super.printName(); // 调用父类的printName方法
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.printName(); // 输出 "Name in Parent: Parent"
    }
}

在这个例子中,尽管 Child 类有自己的 name 属性和 printName 方法,但它通过 super.printName() 调用了父类的 printName 方法来打印父类的 name 属性。

3. 方法重写

当你在子类中重写父类的方法时,可以使用 super 来调用父类的方法。

class Parent {
    void doSomething() {
        System.out.println("Doing something in Parent class");
    }
}

class Child extends Parent {
    @Override
    void doSomething() {
        super.doSomething(); // 调用父类的doSomething方法
        System.out.println("Doing something more in Child class");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.doSomething(); // 首先调用父类的方法,然后调用子类的方法
    }
}

在这个例子中,Child 类重写了 doSomething 方法,并在方法内部首先调用了父类的 doSomething 方法。

4. 阻止继承

使用 super 关键字结合 Object 类的构造函数可以阻止其他类继承某个类。

class FinalClass extends Object {
    public FinalClass() {
        super(); // 调用Object类的构造函数
    }
}

final class TrulyFinalClass {
    // 这个类不能被继承,因为它没有构造函数,且Object类是final的
}

在这个例子中,FinalClass 可以被继承,因为它有一个可访问的构造函数。而 TrulyFinalClass 不能被继承,因为 Object 类是 final 的,且没有提供其他构造函数。


super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个;
2. super必须只能出现在子类的方法或者构造方法中;
3. super和this不能同时调用构造方法。

VS this:

  代表的对象不同:
      this:本身调用这个对象
      super: 代表父类对象的应用
  前提:
      this:没有继承也可以使用
      super:只能在继承条件下才可以使用
  构造方法:
      this();本类的构造
      super();父类的构造

总结

super 是 Java 中一个非常有用的关键字,它在继承结构中提供了一种访问父类成员的方式。正确使用 super 可以帮助你更好地组织代码,实现父类和子类之间的清晰分离和协作。

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

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

相关文章

m4r是什么文件格式?用什么软件打开?

m4r文件格式的诞生伴随着移动设备智能化的崛起。这个格式最初是苹果公司为其iPhone设计的一种特殊的铃声格式。在这个数字音频领域,用户对于个性化铃声的需求逐渐升温,m4r文件格式因此迎来了时代的机遇。这个独特的音频格式的产生,旨在为用户…

UE RPC 外网联机(1)

技术&#xff1a;RPC TCP通信 设计&#xff1a;大厅服务<---TCP--->房间服务<---RPC--->客户端&#xff08;Creator / Participator&#xff09; 1. PlayerController 用于RPC通信控制 2.GameMode 用于数据同步 3.类图 4. 注意 &#xff08;1&#xff09;RPC&a…

Advisor 被重复代理问题排查

问题场景 项目中存在多个 AbstractAdvisorAutoProxyCreator 且其持有的 Advisor Bean 重复 问题复现 相关代码 ResponseBodyRequiresPermissions(PermissionConstant.****)GetMapping(value "/query****.json", name "")public List<***> query…

处理 Oracle 数据库表空间满的问题

处理 Oracle 数据库表空间满的问题 1、诊断表空间满的问题2、处理表空间满的问题3、设置表空间自增结论 在 Oracle 数据库管理中&#xff0c;表空间是一个重要的概念&#xff0c;用于存储数据库对象和数据。当表空间满了时&#xff0c;可能会导致数据库的运行受到影响&#xff…

计算机网络知识

第一章 局域网广播技术&#xff1b;广域网交换技术 n-SDUn-PCIn-PDU TCP/IP网络层无连接&#xff0c;传输层有链接和无连接&#xff1b;OSI传输层有链接和无连接&#xff0c;网络层有链接 TCP/IP没有明确区分服务&#xff0c;接口&#xff0c;协议&#xff0c;OSI明确区分 OSI…

实验7 内置对象response

编写代码&#xff0c;掌握request、response的用法。【参考课本4.6.2】 三、源代码以及执行结果截图&#xff1a; input.jsp <% page language"java" contentType"text/html; charsetutf-8" pageEncoding"utf-8"%> <!DOCTYPE html>…

微信小程序开发之常用组件解释

1 基础内容组件 1.1text组件 text的功能主要是用于内联文本&#xff0c;与网页中的span有点类似。 主要属性有 例子&#xff1a;页面上添加一个可以选中的文本 在wxml文件中添加&#xff1a; <view> <text user-select>17544456565</text> </view>…

ReentrantLock 原理

(一)、非公平锁实现原理 1、加锁解锁流程 先从构造器开始看&#xff0c;默认为非公平锁实现 public ReentrantLock() {sync new NonfairSync(); } NonfairSync 继承自 AQS 没有竞争时 加锁流程 构造器构造&#xff0c;默认构造非公平锁(无竞争&#xff0c;第一个线程尝试…

Jmeter使用BeanShell保存数据到文件

1、目的 在使用jmeter压测时&#xff0c;业务上下连贯&#xff0c;需要对一些编号进行关联操作。这里使用‘JSON提取器’将值提取出来&#xff0c;后面请求可以直接使用。其它业务想要使用就只能把值保存到文件&#xff0c;再使用文件做参数化了。 2、JSON提取器 提取请求值 提…

MongoDB副本集环境搭建(以单机Windows为例)

前言 近期有搭建MongoDB副本集的需求,简单记录一下搭建过程(以本地Windows环境为例)。 一、副本集选型 1 Primary节点、1 Secondary 节点、1 Arbiter节点模式副本集环境搭建。 二、搭建过程 1. 安装MongoDB服务 下载地址:https://www.mongodb.com,如下图所示: 选择…

1.排列数组奇数在前偶数在后

文章目录 大家好&#xff0c;我是晓星航。今天为大家带来的是 排列数组奇数在前偶数在后 相关的讲解&#xff01;&#x1f600; public static void swap(int[] array) {int left 0;int right array.length - 1;while (left < right) {while (left < right &&…

SQLAlchemy常用数据类型

Integer &#xff1a;整形&#xff0c;映射到数据库中是 int 类型。 Float &#xff1a;浮点类型&#xff0c;映射到数据库中是 float 类型。他占据的 32 位。 Double &#xff1a;双精度浮点类型&#xff0c;映射到数据库中是 double 类型&#xff0c;占 据64 位 (SQLALCHEM…

【C++初阶】之类和对象(下)

【C初阶】之类和对象&#xff08;下&#xff09; ✍ 再谈构造函数&#x1f3c4; 初始化列表的引入&#x1f498; 初始化列表的语法&#x1f498; 初始化列表初始化元素的顺序 &#x1f3c4; explicit关键字 ✍ Static成员&#x1f3c4; C语言中的静态变量&#x1f3c4; C中的静…

源聚达科技:抖音开网店步骤难吗

在数字化浪潮的推动下&#xff0c;抖音平台不仅成为了人们娱乐休闲的好去处&#xff0c;更是许多创业者眼中的“金矿”。然而&#xff0c;对于初次尝试在抖音开设网店的朋友来说&#xff0c;难免会对开店流程感到疑惑。究竟开设一个抖音网店的难度如何呢?让我们一探究竟。 要明…

视觉大模型学习路径

本文只是从全局角度出发梳理学习过程&#xff0c;现阶段不会针对每一步写文章&#xff0c;工作没什么时间&#xff0c;但是会梳理自己的学习过程和一些好的参考文章。后面有时间再系统梳理每个模型 总览 本人目前主要研究基于transfermer的视觉大模型&#xff0c;同时也会学习…

dynamic_cast基准测试(C++基础)

dynamic_cast dynamic_cast是专门用于沿继承层次结构进行的强制类型转换&#xff0c;更像是一个函数&#xff0c; 不是编译时进行的类型转换&#xff0c;而是在运行时计算&#xff0c;正因如此&#xff0c;有小性能损失。 在基类和派生类之间相互转换。dynamic_cast常用来做…

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

激光焊接机性价比高的品牌推荐

激光焊接机性价比高的品牌推荐&#xff0c;博特激光作为一个激光焊接机品牌&#xff0c;在市场上也享有一定的声誉。其激光焊接机产品在性价比方面表现不错&#xff0c;受到了部分用户的认可。以下是关于博特激光焊接机的一些优势特点&#xff1a; 1. **性能稳定**&#xff1a;…

视频素材下载网站有哪些?这几个优质无水印素材网你肯定没见过

在视频创作的世界里&#xff0c;每个角落都隐藏着未被发现的宝藏。全球各地的视频素材网站以其独特的视角和丰富的资源&#xff0c;为创作者们提供了无尽的灵感和可能性。不论是寻找充满地方特色的片段&#xff0c;还是需要高品质通用视频素材&#xff0c;以下全球范围内的精选…

人工智能在产业中应用--生成智能

二、生成式人工智能 前面介绍了很多人工智能的应用&#xff0c;接下来部分我们会介绍当前正在进行的生成智能。生成智能和以往的人工智能有什么区别&#xff0c;个人觉得主要区别就在于“度”。在表现上就是以前的人工智能更多是利用既有的数据集分布挖掘和解决在这个数据集下…
最新文章