Java中super和this关键字详解

yizhihongxing

Java中super和this关键字详解

在Java编程中,super和this是两个非常常用的关键字,本文将详细讲解这两个关键字的使用及注意事项。

1. super关键字

在Java中,super关键字用于访问父类的属性和方法。它一般用于子类覆盖父类的方法时,可以通过super关键字调用父类的方法。使用super关键字可以避免重复编写父类已经实现的方法,也可以在子类中通过super访问父类中的成员变量。

1.1 访问父类的属性和方法

在子类中,使用super关键字可以访问父类中的属性和方法。示例如下:

class Person {
    protected String name;

    public Person(String name) {
        this.name = name;
    }

    public void sayHello() {
        System.out.println("Hello, I'm " + name);
    }
}

class Student extends Person {
    protected String school;

    public Student(String name, String school) {
        super(name);
        this.school = school;
    }

    public void sayHello() {
        super.sayHello();
        System.out.println("I study in " + school);
    }
}

public class Test {
    public static void main(String[] args) {
        Student s = new Student("Tom", "Tsinghua University");
        s.sayHello();  // 输出:Hello, I'm Tom\nI study in Tsinghua University
    }
}

在上述示例中,父类Person中有一个name属性和一个sayHello方法,子类Student继承自Person,并新增了一个school属性和一个sayHello方法。在子类StudentsayHello方法中,通过super.sayHello()调用父类的sayHello方法,以保证父类中的相应功能得以执行。同时,在子类中新增的输出语句中也可以访问父类中的name属性。

1.2 调用父类的构造方法

在子类中,使用super关键字可以调用父类的构造方法。在子类的构造方法中,应该首先调用父类的构造方法,以确保正确地初始化父类的成员变量。示例如下:

class Person {
    protected String name;

    public Person(String name) {
        this.name = name;
    }
}

class Student extends Person {
    protected String school;

    public Student(String name, String school) {
        super(name);
        this.school = school;
    }
}

public class Test {
    public static void main(String[] args) {
        Student s = new Student("Tom", "Tsinghua University");
        System.out.println(s.name);    // 输出:Tom
    }
}

在上述示例中,子类Student调用了父类Person中的构造方法,以初始化父类中的name属性。

2. this关键字

在Java中,this关键字用于引用当前对象,可以用于访问当前对象的成员变量和方法。

2.1 引用当前对象

在Java中,this关键字可以引用当前对象。示例如下:

class Person {
    protected String name;

    public Person(String name) {
        this.name = name;
    }

    public void sayHello() {
        System.out.println("Hello, I'm " + this.name);
    }
}

public class Test {
    public static void main(String[] args) {
        Person p = new Person("Tom");
        p.sayHello();   // 输出:Hello, I'm Tom
    }
}

在上述示例中,this.name可以引用当前对象(即Person对象)中的name属性。

2.2 表示当前对象

在Java中,this关键字也可以用于表示当前对象,可以在一个类的方法中调用另一个方法,或者调用其它构造方法。示例如下:

class Person {
    protected String name;

    public Person(String name) {
        this.name = name;
    }

    public void sayHello() {
        System.out.println("Hello, I'm " + this.name);
    }
}

class Student extends Person {
    protected String school;

    public Student(String name, String school) {
        super(name);
        this.school = school;
    }

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

public class Test {
    public static void main(String[] args) {
        Student s = new Student("Tom");
        s.sayHello();    // 输出:Hello, I'm Tom
    }
}

在上述示例中,Student(String name)方法调用了Student(String name, String school)方法,而Student(String name, String school)方法中调用了父类的构造方法Person(String name),解决了重复代码的问题。

结论

在Java中,super关键字用于访问父类的属性和方法,而this关键字用于引用当前对象、表示当前对象,可以用于访问当前对象的成员变量和方法。在使用这两个关键字时,应该注意访问权限的问题,确保访问的成员变量和方法在当前作用域中可见。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中super和this关键字详解 - Python技术站

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

相关文章

  • java 反射: 当Timestamp类型的属性值为null时,设置默认值

    Java 反射:当 Timestamp 类型的属性值为 null 时,设置默认值 在 Java 中,反射是一个非常有用的工具,可以在运行时检测和修改代码的行为。使用反射可以在运行期间动态地访问和修改对象的属性和方法。本文将讨论在使用反射时,如何在 Timestamp 类型的属性值为 null 时设置默认值。 Timestamp 类型简介 Timestamp …

    其他 2023年3月28日
    00
  • Java字符拼接成字符串的注意点详解

    Java字符拼接成字符串的注意点详解 在Java中,由于字符串比字符更加灵活,因此很多情况下我们需要将字符拼接成字符串。但是,在进行字符拼接时,可能会遇到一些坑点,这篇文章将为您详细讲解Java字符拼接成字符串的注意点。 1. 使用String 在Java中,我们可以使用String的concat( )方法将字符拼接成字符串,该方法效率较低,因此不推荐使用。…

    other 2023年6月20日
    00
  • (下载地址)百分浏览器2.2.9.39版本更新发布

    百分浏览器2.2.9.39版本更新发布攻略 简介 百分浏览器是一款功能强大的网络浏览器,它提供了快速、安全和便捷的上网体验。最新版本2.2.9.39带来了一些新功能和改进,本攻略将详细介绍这些更新。 下载地址 你可以从以下地址下载百分浏览器2.2.9.39版本:下载地址 更新内容 1. 新增功能 1.1 夜间模式 百分浏览器2.2.9.39版本引入了夜间模式…

    other 2023年8月4日
    00
  • IP地址和硬件地址冲突的解决

    IP地址和硬件地址冲突的解决攻略 1. 理解IP地址和硬件地址冲突 在计算机网络中,每个设备都有一个唯一的IP地址和硬件地址(也称为MAC地址)。IP地址用于在网络中标识设备的位置,而硬件地址用于在局域网中唯一标识设备的物理地址。当两个设备具有相同的IP地址和硬件地址时,就会发生冲突,导致网络通信故障。 2. 解决冲突的步骤 步骤1:确认冲突 首先,需要确认…

    other 2023年7月30日
    00
  • java输出方法怎么使用

    下面是关于Java输出方法的详细讲解。 1. System.out.print System.out.print()是Java最基本的输出方法,主要用于打印输出文本信息,不会自动换行。语法如下: System.out.print(任意类型的数据); 其中,任意类型的数据可以是字符串、字符、数字、布尔值等Java中的数据类型。下面是一个示例: public c…

    其他 2023年4月16日
    00
  • CorelDRAW X7新特性汇总

    很抱歉,作为文本模型,我无法以标准的markdown格式回答您的问题。但是,我可以为您提供一份详细的攻略,包含CorelDRAW X7的新特性汇总,并提供两个示例说明。请注意,以下内容将以纯文本形式呈现。 CorelDRAW X7新特性汇总 CorelDRAW X7是一款功能强大的矢量图形设计软件,它引入了许多令人兴奋的新特性和改进。以下是CorelDRAW…

    other 2023年10月17日
    00
  • Unity初探之黑暗之光(1)

    Unity初探之黑暗之光(1) 引言 Unity是一款游戏引擎,能够帮助开发者制作高质量、多平台的游戏应用。黑暗之光是一款由Unity开发的第一人称冒险游戏,是Unity在游戏领域的杰作之一。本篇文章将介绍黑暗之光游戏的制作过程,包括环境搭建、场景设计、角色动画等方面。 环境搭建 在开始制作游戏前,我们需要准备好相关环境。由于Unity是运行在Windows…

    其他 2023年3月28日
    00
  • Win10利用bat文件实现文件与文件夹批量重命名的实践

    下面是Win10利用bat文件实现文件与文件夹批量重命名的完整攻略及两个示例: 一、背景 当我们需要对大量文件或文件夹进行命名规范化时,手动一个个改名显然是不现实的。这时我们可以借助bat文件进行批量操作,批量更快更方便。 二、实现步骤 1.编写bat文件 我们可以在电脑上的任意文件夹下新建一个文本文件,右键选择编辑,然后在文本编辑框内输入批量修改的命令,最…

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