1. 程式人生 > >this關鍵字和super關鍵字

this關鍵字和super關鍵字

對象 -s 命名沖突 編譯錯誤 ext ack ret 屬性 ava

  一、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);
    }
}

this關鍵字和super關鍵字