this 和super 關鍵字的區別

this關鍵字

          (1) 每一個類的每一個非靜態方法(沒有被static修飾)都會隱含一個this關鍵字,它指向調用這個方法的對象;當在方法中使用本類屬性時,都會隱含地使用this關鍵字,固然也能夠明確使用。java

          this能夠當作是一個變量,它的值就是當前對象的引用函數

          this關鍵字只能在方法內部使用,表示對「調用方法的那個對象」的引用若是是在同一類中調用另一個方法,則能夠不用寫this,直接調用this

         (2) 爲了區分屬性和局部變量,能夠經過this關鍵字來調用對象

         (3) this關鍵字的用法編譯器

             *當類中非靜態方法的參數名與類的某個成員變量名相同時,爲了不參數做用範圍覆蓋了成員變量的做用範圍,必須明確使用this關鍵字來指定編譯

             *若是某個構造方法的第一條語句具備形式this(...),那麼這個構造方法將調用本類中的其餘構造方法class

             *若是某個方法須要傳入當前對象,則能夠將當前的對象做爲參數傳遞給它
變量

    public class pra {
                      private String  name;
                      private String  sex;
                      private Integer age; 構造函數


                public pra(String name, String sex, Integer age) {
                          super();
                          this.name = name;
                          this.sex = sex;
                          this.age = age;
               } 引用


               public pra() {
                        this("by", "女", 15);  //調到了有參的構造方法
             }
}


super關鍵字


          super表明了父類空間的引用

        (1) super的做用:

            *子父類存在着同名的成員時,在子類中默認時訪問子類的成員,能夠經過super關鍵字指定訪問父類的成員

            *建立子類對象時,默認會先調用父類無參的構造方法,能夠經過super關鍵字指定調用父類的構造方法

     (2)super的用法

              super能夠用來引用直接父類的實例變量。

              super能夠用來調用直接父類方法。

              super()能夠用於調用直接父類構造函數

class C {
     String name = "A";
       public void work() {
         System.out.println("A工做!");
     }
}
 
class B extends C {
     String name = "B";
       public B() {
         super(); // 調用父類構造方法
     }
 
     public void work() {
         System.out.println("B工做!");
     }
 
     public void pint() {
         System.out.println(name);
         System.out.println(super.name); // 調用父類的實例變量
         super.work(); // 調用父類的方法
     }
}
 
public class A {
     public static void main(String[] args) {
         B b = new B();
         b.pint();
     }
}

        (3) 注意事項:

             *若是在子類的構造方法上沒有指定調用父類的構造方法,java編譯器會在子類的構造器裏面加上super()語句

            * super關鍵字調用父類的構造函數時,該語句必需要是子類構造函數的第一個語句

            *super和this不能同時出如今同一個構造函數中調用其餘的構造函數,由於兩個語句都要是第一個語句


區別:

  • 屬性的區別:this訪問本類中的屬性,若是本類沒有此屬性則從父類中繼續查找。super訪問父類中的屬性。
  • 方法的區別:this訪問本類中的方法,若是本類沒有此方法則從父類中繼續查找。super訪問父類中的方法。
  • 構造的區別:this調用本類構造,必須放在構造方法的首行。super調用父類構造,必須放在子類構造方法首行。
  • 其餘區別:this表示當前對象。super不能表示當前對象
相關文章
相關標籤/搜索