this和super关键字详解

目录

this关键字

this关键字调用成员变量

this关键字调用成员方法

this关键字调用构造器

拓展

super关键字

super关键字调用父类的成员变量

super关键字调用父类的成员方法

super关键字调用父类的构造器

总结


        本篇内容给大家带来this和super关键字的特性,从而更能清楚的区分开来它们的区别以及能够在日常开发中学会使用它们。

this关键字

this是什么?干什么的?

        通俗的来说this是指当前对象。可以通过this关键字来调用当前对象的属性,方法以及构造器。同时在有参构造器中也是通过this来对全局属性进行赋值。

this关键字调用成员变量

        可以通过this调用成员变量,解决了局部变量名称的冲突问题。

语法格式:

this.属性名;

示例代码如下:

public class Person {
    String name;
    int age;
    String sex;
    /*Person类有参构造器*/
    public Person(String name, int age, String sex) {
        this.name = name; //使用this关键字调用成员变量对其进行赋值 
        this.age = age;
        this.sex = sex;
    }
}

        由上可以看到this可以区分局部变量以及全局变量。

this关键字调用成员方法

        可以在一个方法中调用本类中的另一个方法。

语法格式

this.方法名([参数1],[参数2]...);

示例代码如下:

public class Person {
    
    public void method1(){
        this.method2();// this关键字调用本类的method2方法。
        System.out.println("Person类中的method1方法");
    }

    public void method2(){
        System.out.println("Person类中的method2方法");
    }
    
}

this关键字调用构造器

        可以通过this关键字调用本类的构造器。

语法格式:

this([参数1],[参数2]...);

示例代码如下:

public class Person {

    String name;
    int age;

    public Person() {
        System.out.println("Person类的无参构造器被执行了...");
    }

    public Person(String name, int age) {
        this(); //this关键字调用本类的无参构造器
        this.name = name;
        this.age = age;
        System.out.println("Person类的有参构造器被执行了...");
    }
}

测试:

public class PersonTest {
    public static void main(String[] args) {
        Person person = new Person("张三", 19);
    }
}

控制台打印:
Person类的无参构造器被执行了...
Person类的有参构造器被执行了...

由测试打印结果可以得知,可以使用this关键字调用本类的构造器。

注意:this调用构造器时必须方法构造器的首行位置。

拓展

        当使用this关键字调用本类的属性,方法时,如果本类没有,会出现什么情况?

示例代码如下:

public class Person {

    String name="张三";
    int age=19;
    public void personMethod(){
        System.out.println("Person类的方法");
    }
}
/*继承Person类*/
class Student extends Person{

    String grade;

    public void testMethod(){
        //本类没有该属性会调用父类的属性
        System.out.println(this.name);
        System.out.println(this.age);
        //本类没有该方法会调用父类的方法
        this.personMethod();
    }
}

测试:

public class PersonTest {
    public static void main(String[] args) {

        Student student = new Student();
        student.testMethod();
    }
}

控制台打印结果:
张三
19
Person类的方法

由控制台打印结果可以得出:

  1. 当使用this访问本类的属性时,如果本类没有此属性则从父类继续查找。
  2. 当使用this访问本类的方法时,如果本类没有此方法则从父类继续查找。

到这有的人可能会说,this为什么不去调用父类构造器?前几篇文章讲解了,创建子类对象时会默认去先调用父类的无参构造器。如果使用super关键字可以显式的调用。那接下来给大家讲解一下super关键字吧!


super关键字

        super关键字可以访问父类的成员变量,成员方法和构造器

super关键字调用父类的成员变量

语法格式:

super.属性名;

super关键字调用父类的成员方法

super.方法名([参数1],[参数2]...);

super关键字调用父类的构造器

super([参数1],[参数2]...);

示例代码如下:

public class Person {

    String name;
    int age;
    /*父类的有参构造器*/
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("Person类的有参构造器被执行...");
    }
    /*父类的成员方法*/
    public void personMethod(){
        System.out.println("Person类的方法");
    }
}
/*继承Person类*/
class Student extends Person{

    String name;
    String grade;

    /*子类无参构造*/
    public Student() {
        super("张三",19); //调用父类的有参构造器
        System.out.println("Student类的无参构造器被执行了...");
    }

    public void studentMethodTest(){
        super.personMethod(); // 调用父类的方法
        System.out.println(super.name); //调用父类的属性
    }
}

测试:

public class PersonTest {
    public static void main(String[] args) {

        Student student = new Student();
        System.out.println("=====================");
        student.studentMethodTest();

    }
}

控制台打印结果:
Person类的有参构造器被执行...
Student类的无参构造器被执行了...
=====================
Person类的方法
张三

注意:

  • super调用构造器时必须方法构造器的首行位置。
  • this和super调用构造器不能同时出现。
  • super访问父类成员,父类没有该成员则向上查找(父类),直到找到为止,否则报错。

总结

this和super比较

功能thissuper
访问属性

访问本类属性

如若没有则向上查找

访问父类属性

如若没有则向上查找

访问方法

访问本类方法

如若没有则向上查找

访问父类方法

如若没有向上查找

调用构造器

调用本类构造器

必须放在构造器首行

调用父类构造器

必须放在子类构造器首行

含义this表当前对象super表父类对象

        本篇主要讲解了this和super关键字的使用方法,以及需要注意的细节,同时后面将this和super做了比较。在日常开发中熟练正确使用关键字可以让代码更简洁,提供开发效率。

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值