Java学习之super VS this

ops/2024/9/23 4:36:18/

在Java中,super和this关键字用于引用当前对象或父类对象的成员变量或方法。

一、super关键字:

  • super关键字用于在子类中访问父类的成员变量或方法。
  • 使用super关键字调用父类构造方法。
  • 使用super关键字可以避免父类和子类中相同名称的变量或方法冲突。
java">class Parent {int num = 1;    public void display() {System.out.println("Parent method");}
}class Child extends Parent {int num = 2;    public void display() {super.display(); // 调用父类方法System.out.println("Child method");System.out.println("Value of num in Parent class: " + super.num); // 访问父类的成员变量}
}public class Main {public static void main(String[] args) {Child child = new Child();child.display();}
}
//输出结果如下:
//Parent method
//2Child method
//3Value of num in Parent class: 1

 首先,创建了一个 Child 类的实例 child。调用 child.display() 方法时,由于 Child 类重写了 Parent 类的 display() 方法,所以执行的是 Child 类的 display() 方法体。在 Child 类的 display() 方法中,首先通过 super.display() 调用了父类 Parent 的 display() 方法,因此输出了 "Parent method"。接着输出 "Child method"。最后,使用 super.num 访问到了父类 Parent 中定义的成员变量 num 的值,其值为初始化时设定的 1,因此输出 "Value of num in Parent class: 1"。

二、this关键字:

  • this关键字用于引用当前对象的成员变量或方法。
  • 使用this关键字调用当前对象的构造方法。
  • 使用this关键字可以避免在方法中使用相同名称的局部变量与成员变量冲突。
java">class Person {private String name;public Person(String name) {this.name = name;}public void display() {System.out.println("Name: " + this.name); // 使用this关键字访问成员变量}
}public class Main {public static void main(String[] args) {Person person = new Person("Alice");person.display();}
}

三、区别:

3.1、指向对象的不同:
  • this 指向当前对象,即当前类实例的引用。
  • super 指向当前对象的直接父类对象,主要用于调用父类的方法或属性。
3.2、作用域不同:
  • this 可以访问当前类的所有成员(包括私有成员)。
  • super 只能访问父类中非私有的(protected或public)成员。
3.3、调用构造方法:
  • this(...) 用于调用当前类的其他构造方法。
  • super(...) 必须放在子类构造方法的第一行,用于调用父类的构造方法。
3.4、冲突解决:
  • this 用于解决当前类内部局部变量与成员变量的命名冲突。
  • super 用于解决子类成员与父类成员重名时,明确调用父类成员的需求。

http://www.ppmy.cn/ops/33802.html

相关文章

TwinCAT3 实时内核调度算法

前言 TwinCAT3 支持多核心CPU并行运行实时任务,根据官方网站的帮助信息“实时”定义取自DIN44300,而且实时任务的调度算法默认是 RMS算法(速率单调调度算法) RMS算法 来看一下百度百科的解释: RMS(单调速…

解决Uncaught TypeError: Cannot read properties of null (reading ‘getAttribute‘)

问题: 用了element ui 的echart ,初始化时候找不到指定id的元素,导致的问题,如下 浏览器控制台输出的错误信息如下 Echars echarts.min.js:22 Uncaught TypeError: Cannot read properties of null (reading getAttribute)at echarts.min.…

Android使用kts发布aar到JitPack仓库

Android使用kts发布aar到JitPack 之前做过sdk开发,需要将仓库上传到maven、JitPack或JCenter,但是JCenter已停止维护,本文是讲解上传到JitPack的方式,使用KTS语法,记录使用过程中遇到的一些坑.相信Groovy的方式是大家经常使用的,…

结构体介绍(2)

结构体介绍(2) 前言一、结构体的内存对齐之深入理解为什么存在内存对齐?修改默认对齐数 二、结构体传参2.1:该怎么传参呢? 三、结构体实现位段3.1什么是位段位段的内存分配位段的跨平台问题 总结 前言 根据之前讲了结…

【八股】AQS,ReentrantLock实现原理

AQS 概念 AQS 的全称是 AbstractQueuedSynchronized (抽象队列同步器),在java.util.concurrent.locks包下面。 AQS是一个抽象类,主要用来构建锁和同步器,比如ReentrantLock, Semaphore, CountDownLatch,里…

使用python和pyqt开发的抽签小程序v1.0

使用python和pyqt开发的抽签小程序v1.0 作用效果代码 作用 对输入框中的文本进行随机抽取,抽取数量为3行。 效果 代码 import sys import random from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton, QMessageBoxclass Ra…

Android Studio学习笔记——数据库存储

Android Studio学习笔记——数据库存储 6.1持久化技术简介6.2 文件存储将数据存储到文件中从文件中读取数据 6.3 SharedPreferences存储6.3.1 将数据存储到是SharedPreferences中6.3.2 从SharedPreferences中读取数据6.3.3 实现记住密码功能 6.4 SQLite数据库存储6.4.1 创建数据…

急速入门Prompt开发之跨国婚姻小助手

文章目录 前言MoonShot编写提示词对接模型WebUI编写完整代码 前言 整个活,同时分享技术~至于是啥活,懂得都懂,男孩子自强自尊自爱!!! 先看看实现效果吧: 那么这里的话,我们使用到的…