this和super用法的总结

 

在学习this和super关键字时,发现它们有诸多相同点,同时这两个关键字非常常用,现对它们做以下的总结。

一、概况

This:

This指代当前对象,this()指代当前对象的其他构造函数

Super:

Super指代父类对象,super()指代父类的构造函数;

二、具体用法,对比super和this理解

1、this用作指代当前对象,super指代父类对象

A、this.成员变量,可调用当前对象的成员变量,一般是在当前类的某个方法的形参和当前的对象成员变量同名的时候用到

super.成员变量,调用父类的成员变量。

请观察以下代码,顺便讨论下继承的问题。

 1 public class BokeCode{
 2   public static void main(String [] args){
 3   //另外,顺便观察下其他继承的特性
 4     Bmw bmw1 = new Bmw(30);
 5     System.out.println(bmw1.size);//输出的是子类的size
 6     Car bmw2 = new Bmw();
 7     System.out.println(bmw2.size);//输出的是父类的size
 8   }
 9 }
10 
11 class Car{
12   int size;
13   public Car(int size){
14     his.size = size;
15     System.out.println("我是Car的构造方法");
16   }
17 }
18 
19 class Bmw extends Car{
20   /*
21   *重新定义size(其实意义不大,因为父类也有一个size了,成员变量不可以重载
22   *其实他们就是两个毫无关系的变量而已,只是名字一样
23   */
24   int size;
25   public Bmw(int size){
26     //调用父类构造方法
27     super(20);
28     System.out.println("我是父类对象的size " + super.size);//输出父类变量,值是20
29     /初始化子类的size
30     this.size = size;
31     System.out.println("我是子类对象的size " + this.size);//输出子类变量,值是30
32     System.out.println("我是初始化子类对象之后的父类对象的size " + super.size);//父类的size不受影响,输出还是20
33 
34   }
37 }

B、this可以指代当前对象的方法,调用方法时可以用this.menthod();当然,在没有混淆的情况下,一般无需如此;当this后跟参数的时候,代指当前对象的对应相同参数的其他构造方法

Super.menthod()类似,指代调用父类的方法;当super后跟参数时,指代对应父类中有相同参数的构造方法。

二、使用注意事项

1、this和super在用于构造函数中(一般this和super后面跟参数是用于构造函数中调用其他构造函数)时,只能是构造函数的第一条语句,因为子类本身就继承了父类的所有方法还有属性,只有在父类对象被构造出来后再执行子类的构造方法的其他语句才是合理得,而this为什么也必须写在第一条语句中,是因为可以通过this调用其他构造方法,而其他构造方法有可能会有以super()的形式调用父类构造方法。

2、在子类中重载父类构造方法的时候,如果父类的构造方法时无参数的,可以不必写出supe();有参数是必须写出的;

调用本对象的属性方法时,可以以this.属性,this.方法来调用,但是一般不画蛇添足。

接着上面例子,补充几条下语句

class Car{
    int size;
    public Car(int size){
        this.size = size;
        System.out.println("我是Car的构造方法");
    }
    public void drive(){
        System.out.println("我是方法drive()");
    }
}

class Bmw extends Car{
    /*
    *重新定义size(其实意义不大,因为父类也有一个size了,成员变量不可以重载
    *其实他们就是两个毫无关系的变量而已,只是名字一样
    */
    int size;
    public Bmw(int size){
        //调用父类构造方法
        super(20);
        System.out.println("我是父类对象的size " + super.size);//输出父类变量,值是20
        //初始化子类的size
        this.size = size;
        System.out.println("我是子类对象的size " + this.size);//输出子类变量,值是30
        System.out.println("我是初始化子类对象之后的父类对象的size " + super.size);//父类的size不受影响,输出还是20
        
    }
    public void drive_fast(){
        super.driver();  //调用父类方法
        System.out.println("我是方法drive_fast()");
    }
    public void method_test(){
        this.driver_fast();//调用之类方法,但一般省略this
    }
    
}

 

转载于:https://www.cnblogs.com/lcplcpjava/p/5707032.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值