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的区别!!!

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页