this关键字和super关键字

  一、this

  Java中为了解决变量的命名冲突和不确定性问题,引入了关键字this。this代表当前类的一个实例,它经常出现在方法和构造方法中,具体使用情况有以下三种:

  1,返回调用当前方法的对象的引用。

package test;

public class Increase {
    
    private int i = 0;
    public Increase operation(){
        i++;
        return this;
    }
    public void show(){
        System.out.println(i);
    }
    public static void main(String[] args) {
        Increase in = new Increase();
        in.show();
        in.operation().operation().show();;
    }
}

上面的this表示的Increase的实例,也就是in。

  2,在构造方法中调用当前类的其它构造方法。

package test;

public class Person {
    
    private String name;
    private int age;
    private String sex;
    Person(){
        sex = "male";
    }
    Person(String _name){
        this();//这个必须放在构造方法体的开头
        name = _name;
    }
    Person(String _name,int _age){
        this(_name);
        age = _age;
    }
}

上面的Person类有三个构造方法,分别为无参的、一个参数的和两个参数的。使用this提高了代码的重复利用。

  3,当方法的参数名和成员变量名相相同时,用于区分参数名和成员变量名。

public class Person {
    
    private String name;
    private int age;
    private String sex;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

   二、super

  super代表父类的实例,在子类中,使用super可以调用其父类的方法、属性和构造方法。

  1,调用父类的构造方法

public class Student extends Person {
    private String stuNo;
    private String grade;
    
    public Student(){
        super();
    }
    public Student(String name ,String stuNo,String grade){
        super(name);
        this.stuNo = stuNo;
        this.grade = grade;
    }
}

调用父类无参的构造函数和单参的构造函数。ps:若父类中无对应的构造函数,将会出现编译错误。

  2,调用父类的属性和方法

public class Student extends Person {
    private String stuNo;
    private String grade;
    
    public Student(){
        super();
    }
    public Student(String name ,String stuNo,String grade){
        super(name);
        this.stuNo = stuNo;
        this.grade = grade;
    }
    
    public void show(){
        super.show();//调用父类的函数
        System.out.println(stuNo);
        System.out.println(grade);
    }
}

猜你喜欢

转载自www.cnblogs.com/caozx/p/9168966.html