Java中超详细this与super的概念和用法

Java中超详细this与super的概念和用法

1. this关键字

在Java中,this关键字可以代表当前对象的引用。this关键字可以用于以下几种情况:

1.1 调用当前类的构造函数

在一个类中,可以存在多个构造函数,有些构造函数可能需要调用其它构造函数完成一些初始化操作,此时可以使用this关键字来调用当前类中的其它构造函数。

示例代码:

public class Student {

    private String name;
    private int age;

    public Student() {
        this("Unknown", 0);
    }

    public Student(String name) {
        this(name, 0);
    }

    public Student(int age) {
        this("Unknown", age);
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

1.2 解决变量重名问题

如果一个方法中存在一个局部变量,其与成员变量同名,那么在方法中引用该变量时,编译器默认使用局部变量,而不是成员变量。此时可以使用this关键字来引用成员变量。

示例代码:

public class Student {

    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age){
        this.age = age;
    }

    public void printInfo(){
        System.out.println("Name: " + this.name);
        System.out.println("Age: " + this.age);
    }
}

1.3 返回当前对象的引用

在一个方法中,可以使用this关键字来返回当前对象的引用。

示例代码:

public class Student {

    private String name;
    private int age;

    public Student setName(String name) {
        this.name = name;
        return this;
    }

    public Student setAge(int age){
        this.age = age;
        return this;
    }

    public void printInfo(){
        System.out.println("Name: " + this.name);
        System.out.println("Age: " + this.age);
    }
}

2. super关键字

在Java中,super关键字可以用来引用当前对象的父类对象。super关键字可以用于以下几种情况:

2.1 调用父类的构造函数

在一个子类的构造函数中,可以使用super关键字来调用其父类的构造函数。通过调用父类的构造函数,可以完成父类对象的初始化工作。

示例代码:

public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Student extends Person {
    private String school;
    public Student(String name, int age, String school) {
        super(name, age);
        this.school = school;
    }
}

2.2 引用父类的成员变量和成员方法

在一个子类中,可以使用super关键字来引用其父类中的成员变量和成员方法。如果一个子类中存在与父类同名的成员变量或成员方法时,使用super关键字可以明确地引用父类中的成员变量或成员方法。

示例代码:

public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void sayHello() {
        System.out.println("Hello, my name is " + this.name);
    }
}
public class Student extends Person {
    private String school;
    public Student(String name, int age, String school) {
        super(name, age);
        this.school = school;
    }
    @Override
    public void sayHello() {
        super.sayHello();
        System.out.println("I am a student of " + this.school);
    }
}

在上面的示例代码中,子类Student重写了父类Person的sayHello()方法,并在其中调用了父类Person中的sayHello()方法,可以使用super关键字来引用父类中的成员方法。

以上就是Java中this和super关键字的详细介绍和用法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中超详细this与super的概念和用法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 易语言读环境变量命令使用讲解

    易语言读环境变量命令使用讲解 在易语言中,想要读取环境变量的值,我们可以使用系统命令GetEnvironmentVariableA来实现。本文将详细介绍如何在易语言中使用GetEnvironmentVariableA来读取环境变量的值,包括如何调用解释函数、函数的参数、返回值的处理等内容。 调用解释函数 要在易语言中调用GetEnvironmentVaria…

    other 2023年6月27日
    00
  • Win11如何修改用户文件夹名称?Win11修改用户文件夹名称教程

    当我们在安装 Windows 11 操作系统时,系统会默认创建一个用户名,该用户名将成为我们的用户文件夹名称,有时该文件夹名称并不符合我们的需求和喜好,这时我们可以通过以下方法修改用户文件夹名称: 1. 创建本地管理员账户 在 Windows 11 系统中,我们无法直接修改当前的用户文件夹名称,因此需要创建一个本地管理员账户,用该账户来修改用户文件夹名称,请…

    other 2023年6月27日
    00
  • 你知道怎么基于 React 封装一个组件吗

    当基于React封装组件时,需要注意以下几个步骤: 分析组件功能和逻辑,确定组件的props和state。 将组件拆分成更小的组件(如果需要)。 选择合适的生命周期方法来管理组件的行为。 确定组件样式并引入CSS样式表。 测试和调试组件。 以下是两个示例说明: 示例一: 创建一个计数器组件 确定计数器组件的props和state。我们需要一个“count”状…

    other 2023年6月25日
    00
  • Java有序链表的合并实现方法

    一、有序链表的合并方法 在Java中,有序链表的合并方法可以通过递归实现,具体步骤如下: 如果两个有序链表中,其中一个为空,则返回另一个链表。 比较两个链表的头节点值,将较小的节点作为合并后链表的头节点。 将较小节点的下一个节点和另一个链表进行递归合并,将递归结果作为较小节点的下一个节点。 示例1:合并两个有序链表 链表1: 1 -> 3 -> …

    other 2023年6月27日
    00
  • Win7系统打不开后缀名为caj文件怎么解决?

    Win7系统打不开后缀名为caj文件的解决攻略 如果你的Win7系统无法打开后缀名为caj的文件,可能是因为缺少相应的软件或者文件关联错误。下面是解决这个问题的完整攻略: 步骤一:安装CAJViewer软件 首先,你需要安装一个能够打开caj文件的软件。推荐使用CAJViewer,它是中国知网的官方阅读器,专门用于打开caj格式的文件。 在浏览器中搜索“CA…

    other 2023年8月5日
    00
  • JavaSE基础篇—MySQL三大范式—数据库设计规范

    JavaSE基础篇—MySQL三大范式—数据库设计规范 MySQL是常见的关系数据库管理系统,是一种常用的数据库语言。而无论在何种情况下,一个优秀的数据库设计规范都是不可或缺的。本文将解析MySQL三大范式,为你提供一份可靠的数据库设计规范。 什么是MySQL三大范式 MySQL三大范式是关系数据库中的基本规则,确保数据库表的行动规范。据说,这些范式存在是为…

    其他 2023年3月28日
    00
  • matplotlib 入门之Image tutorial

    Matplotlib入门之Image Tutorial的完整攻略 本文将为您详细讲解Matplotlib中Image Tutorial的内容,包括图像的读取、显示、处理和保存等内容。在文中,我们将使用Matplotlib 3.4.2版本作为示例。 图像的读取和显示 以下是使用Matplotlib读取和显示图像的步骤: 导入Matplotlib和Numpy库:…

    other 2023年5月6日
    00
  • 深入AndroidManifest.xml文件解析详解

    以下是使用标准的Markdown格式文本,详细讲解深入AndroidManifest.xml文件解析的完整攻略: 深入AndroidManifest.xml文件解析 AndroidManifest.xml是Android应用的清单文件,它包含了应用的基本信息、组件声明、权限要求等重要信息。深入理解和解析AndroidManifest.xml文件可以帮助我们更…

    other 2023年10月14日
    00
合作推广
合作推广
分享本页
返回顶部