在 Java 中,super关键字和this关键字的区别

news/2024/9/19 4:31:36 标签: 开发语言, java

在 Java 中,super关键字和this关键字的区别如下:

一、指代对象不同

  • this

    • 代表当前对象的引用。即正在调用成员方法或构造方法的那个对象实例。
    • 例如,在一个类的方法中,this可以用来引用当前对象的成员变量和方法。
  • super

    • 代表父类对象的引用。可以通过它来访问父类的成员变量、方法和构造方法。

二、用法不同

2.1 访问成员变量

  • this:用于区分局部变量和成员变量,当方法中的局部变量与成员变量同名时,可以使用this.成员变量名来访问成员变量。例如:
   public class MyClass {
       private int num;

       public MyClass(int num) {
           this.num = num;
       }
   }
  • super:当子类和父类有同名成员变量时,可以使用super.成员变量名来访问父类的成员变量。例如:
   class Parent {
       int num = 10;
   }

   class Child extends Parent {
       int num = 20;

       void print() {
           System.out.println("Child's num: " + this.num);
           System.out.println("Parent's num: " + super.num);
       }
   }

2.2 调用方法:

  • this:可以使用this.方法名()来调用当前类的其他方法。例如:
   public class MyClass {
       public void method1() {
           System.out.println("Method 1");
           this.method2();
       }

       public void method2() {
           System.out.println("Method 2");
       }
   }
  • super:可以使用super.方法名()来调用父类被重写的方法。例如:
   class Parent {
       void show() {
           System.out.println("Parent's show method");
       }
   }

   class Child extends Parent {
       @Override
       void show() {
           System.out.println("Child's show method");
           super.show();
       }
   }

2.3 调用构造方法:

  • this:在构造方法中,this()用于调用同一类中的其他构造方法,且必须放在构造方法的第一行。例如: 
   public class MyClass {
       private int num;

       public MyClass() {
           this(10);
       }

       public MyClass(int num) {
           this.num = num;
       }
   }
  • super:在子类的构造方法中,super()用于调用父类的构造方法,且也必须放在构造方法的第一行。例如:
   class Parent {
       public Parent() {
           System.out.println("Parent constructor");
       }
   }

   class Child extends Parent {
       public Child() {
           super();
           System.out.println("Child constructor");
       }
   }

三、使用场景不同

  • this

    • 通常用于解决成员变量的命名冲突、在一个类的内部方法之间进行调用等场景。
    • 在构造方法中,用于区分参数名和成员变量名,并调用同一类的其他构造方法以实现代码复用。
  • super

    • 主要用于访问父类的成员变量和方法,尤其是在子类中需要调用父类被重写的方法或访问被隐藏的成员变量时。
    • 在子类的构造方法中调用父类的构造方法,以确保父类的初始化工作先完成。

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

相关文章

Day99 代码随想录打卡|动态规划篇--- 01背包问题

题目(卡玛网T46): 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&am…

springboot实训学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记(4)(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次,点赞7…

vscode搭建ros开发环境问题记录(更新...)

文章目录 vscode 不能自动补全方法一:方法二: 开发环境: vmware 15.7 ubuntu 20.04 ros noetic vscode 不能自动补全 方法一: 这里将头文件已经正确包含到c_cpp_properties.json中代码中仍然不能自动补全, 将C_CPP插…

C++——求3个数中最大的数(分别考虑整数、双精度数、长整数数的情况),用函数重载方法。

没注释的源代码 #include <iostream> using namespace std; int max(int a,int b,int c); double max(double a,double b,double c); long max(long a,long b,long c); int main() { int a,b,c; double x,y,z; long m,n,p; cout<<"请输入三…

移动技术开发:登录注册界面

1 实验名称 登录注册界面 2 实验目的 掌握基本布局管理器的使用方法和基本控件的使用方法 3 实验源代码 布局文件代码&#xff1a; <?xml version"1.0" encoding"utf-8"?><LinearLayoutxmlns:android"http://schemas.android.com/apk/…

vmware,centos8(虚拟机) 的安装

安装vmware 点击下方网址 虚拟机安装地址https://www1.msc23.cn/vm/?bd_vid8829610582362807097选择VMware17 打开文件所在地&#xff0c;双击安装 同意条款 选择安装位置 不将VMware配置到环境变量path 不检查更新,不加入客户体验 创建桌面快捷方式 开始安装 安装完成…

Java--stream流、方法引用

Stream流 - Stream流的好处 - 直接阅读代码的字面意思即可完美展示无关逻辑方式的语义 - Stream流把真正的函数式编程风格引入到Java中 - 代码简洁 - Stream流的三类方法 - 获取Stream流 - 创建一条流水线,并把数据放到流水线上准备进行操作 - 中间方法 - 流水线上的操作 - 一次…

Unet改进34:添加KANConv2DLayer(2024最新改进方法)

本文内容:在不同位置添加KANConv2DLayer 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 地址 1.步骤一 新建blocks/kan_conv.py文件,添加如下代码: from functools import lru_cacheimport torch import torch.nn as nn from torch.nn.functional …