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

yizhihongxing

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日

相关文章

  • FreeRTOS实时操作系统的任务概要讲解

    一、FreeRTOS实时操作系统概述 FreeRTOS是一个功能强大、灵活可靠且开源的实时操作系统。它支持多任务、多线程,并且可以运行于各种不同的嵌入式系统平台上。该系统具有以下特性: 内核位置独立,支持多种处理器架构; 轻量级设计,不需要特定硬件支持; 多任务支持,可以支持多个任务同时运行; 支持多种不同的调度算法; 支持不同类型的信号量、消息队列等同步机…

    other 2023年6月27日
    00
  • 学习ASP.NET Core Razor 编程系列八——并发处理

    下面是“学习ASP.NET Core Razor 编程系列八——并发处理的完整攻略”的详细讲解,包括并发处理的概念、解决方案和两个示例等方面。 并发处理的概念 并发处理是指在多个线程或进程同时执行的情况下,保证数据的一致性和正确性的处理方式。在ASP.NET Core Razor编程中,常见的并发处理场景包括多个用户同时访问同一个资源、多个线程同时修改同一个…

    other 2023年5月5日
    00
  • Windows量身定做的登录管理工具

    Windows量身定做的登录管理工具 Windows系统提供了许多登录管理工具,使得用户可以方便地管理登录设置。本文将详细介绍这些工具的功能和使用方法,包括: 本地用户和组管理器 计算机管理控制台 控制面板中的用户账户 本地用户和组管理器 本地用户和组管理器是一个强大的Windows管理工具,可以用来查看和修改本地计算机上的用户和组设置。它可以通过下列步骤打…

    other 2023年6月25日
    00
  • Spring超详细讲解IOC与解耦合

    下面我将为您分享“Spring超详细讲解IOC与解耦合”的攻略。 Spring超详细讲解IOC与解耦合 什么是IOC IOC全称为Inversion of Control,即控制反转。它是指在开发中,将对象的创建和对象之间的调用交给Spring容器去完成,而不是由程序员主动去创建和调用,从而实现对象之间的解耦合。 IOC的实现原理 Spring通过IOC容器…

    other 2023年6月27日
    00
  • MySQL正则表达式REGEXP使用详解

    当然!下面是关于\”MySQL正则表达式REGEXP使用详解\”的完整攻略: MySQL正则表达式REGEXP使用详解 MySQL中的REGEXP函数可以用于在查询中使用正则表达式进行模式匹配。以下是两个示例: 示例1:匹配以字母开头的字符串 SELECT * FROM table_name WHERE column_name REGEXP ‘^[A-Za-…

    other 2023年8月19日
    00
  • java词法分析器DDL递归应用详解

    Java词法分析器DDL递归应用详解 DDL(Deep Directory List)递归算法 是一种非常常用的递归算法。该算法可以递归地遍历指定目录下的所有子目录和文件,获取相应的目录树结构或者文件列表。 在实现Java词法分析器时,DDL递归算法可以被运用于解析Java源代码文件,获取相应的关键字、语句、注释等词法信息,从而对源代码进行分析和处理。 以下…

    other 2023年6月27日
    00
  • c语言scanf函数返回值小记

    以下是 ECC 构筑安全可靠的区块链的完整攻略,包括区块链的安全性问题、ECC 的作用和两个示例说明。 区块链的安全性问题 区块链是一种去中心化的分布式账本技术,具有不可篡改、去中心化、匿名性等特点。然而,区块链也存在一些安全性问题,如: 51%攻击:攻击者掌控了区块链网络中超过51%的算力,从而可以篡改交易记录。 双花攻击:攻击者在区块链网络中发送两笔相同…

    other 2023年5月6日
    00
  • PHP使用递归生成文章树

    下面是关于“PHP使用递归生成文章树”的完整攻略。 什么是递归 递归是指一个函数在调用自身的过程中,不断地将问题分解为规模更小的子问题并计算解答的过程。 如何使用递归生成文章树 步骤一:获取数据库中的所有文章列表 首先,我们需要从数据库中获取所有文章的列表。假设我们已经用PHP连接了MySQL数据库,可以使用如下代码获取文章列表: // 连接数据库 $db …

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