this和super详解

this和super的区别

用法
this :

  1. this()方法是调用本类的构造方法;
  2. this+成员变量,形参与成员名字重名,用this来区分(this.name = name;);
  3. this()方法是调用本类的构造方法 使用时要注意参数比构造函数参数少且只少一个。
    看测试源码:(可以自己运行下面源码测试)
    1.先创建一个测试类:
public class testThis {
    String name;
    int age;

    public testThis() {
        System.out.println("父类的无参构造方法");
    }

    public testThis(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("父类的有参构造方法");
    }
}

2。再创建一个子类:

public class Person extends testThis {
    /*this()方法是调用本类的构造方法
    * 使用时要注意参数比构造函数参数少且只少一个
    * */
    public Person() {
        System.out.println("子类的无参构造方法");
    }
    public Person(String name){
        this();/*引用本类的无参构造方法*/
        this.name=name;/*形参与成员名字重名,用this来区分*/
    System.out.println("只有一个形参==>子类的有参构造方法");
}
    public Person(String name, int age) {
        this(name);/*引用本类的无参构造方法*/
        this.name=name;/*形参与成员名字重名,用this来区分*/
        this.age=age;/*形参与成员名字重名,用this来区分*/
        System.out.println("两个形参==>子类的有参构造方法");
    }

    public static void main(String[] args) {
        Person people1 = new Person("liu", 23);
        System.out.println(people1);
        Person people2 = new Person("liu");
        System.out.println(people2);
    }
}

super :

  1. super()方法是调用父类的构造方法。
    其他super细节可以看下方源码(一些注意事项都在下方代码中):
    先定义一个父类:
public class testSuper {
    String name;
    int age;

    public testSuper() {
        System.out.println("父类的无参构造方法");
    }

    public testSuper(String name){
        System.out.println("只有一个形参==>父类的有参构造方法");
    }
    public testSuper(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("两个形参==>父类的有参构造方法");
    }
}

再定义一个子类:

public class sun extends testSuper {
    /*使用super()方法之后不会再默认调用父类的无参构造函数
    * 使用super()方法,参数要与构造函数的参数相对应
    * */
    public sun() {
        super();/*调用父类的无参构造函数*/
        System.out.println("子类的无参构造方法");
    }
    public sun(String name){
        super(name);/*调用父类中只有一个形参的有参构造函数*/
    }
    public sun(String name, int age) {
        super(name, age);/*调用父类中两个形参的有参构造函数*/
    }

    public static void main(String[] args) {
        sun sun1 = new sun();
        System.out.println(sun1);
        /*父类的无参构造方法
        子类的无参构造方法*/
        sun sun2 = new sun("liuyuxuan");
        System.out.println(sun2);
        /*只有一个形参==>父类的有参构造方法*/
        sun sun3 = new sun("liuyuxuan", 23);
        System.out.println(sun3);
        /*两个形参==>父类的有参构造方法*/
    }
}

运行过这几段代码之后应该会有体会this和super的区别!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值