this和super的用法

Java關鍵字:

a、Java中一些賦以特定的含義、並用做專門用途的單詞稱爲關鍵字,用來表示一種數據類型或數據結構;

b、Java中所有關鍵字都是小寫的;

c、goto和const 雖然從未被使用,但也作爲Java關鍵字保留;

d、關鍵字不能用作變量名、方法名、類名、包名和參數;

目前Java共有50個關鍵字:

final static this super public protected default privatevolatile synchronized abstract assert boolean break byte continue case catch char class const double do extends else float for goto long if implements import native new null instanceof int interface package return short strictfp  switch  while void throw throws transient try 

1、this關鍵字

表示類中的屬性;可使用this調用本類的構造方法;this表示當前對象

(1)表示類中的屬性

[java] view plain copy
  1. public class Person {  
  2.     private String name;  
  3.     private int age;  
  4. //  String name和name爲實例化時傳遞過來的參數,this.name表示類的屬性  
  5.     public Person(String name, int age){  
  6.         this.name = name;//爲類的屬性賦值  
  7.         this.age = age;  
  8.     }  
  9.     public String toString(){  
  10.         return "姓名:"+this.name+"年齡:"+this.age;  
  11.     }  
  12. }  
[java] view plain copy
  1. public class ThisDemo01 {  
  2.     public static void main(String[] args) {  
  3.         Person per = new Person("張三"20);  
  4.         System.out.println(per);  
  5.     }  
  6. }  
輸出結果:

[java] view plain copy
  1. 姓名:張三年齡:20  
(2)this調用本類的構造方法

注意:a、使用this調用構造方法只能放在構造方法的首行;b、程序中至少存在一個構造方法是不使用this調用其他構造方法的,一般都會將無參構造方法作爲出口

[java] view plain copy
  1. public class Person {  
  2.     private String name;  
  3.     private int age;  
  4. //  定義無參構造方法  
  5.     public Person(){  
  6.         System.out.println("一個新的Person對象被實例化");  
  7.     }  
  8.     public Person(String name, int age){  
  9.         this();//此處調用Person的無參構造方法  
  10.         this.name = name;//爲類的屬性賦值  
  11.         this.age = age;  
  12.     }  
  13.     public String toString(){  
  14.         return "姓名:"+this.name+"年齡:"+this.age;  
  15.     }  
  16. }  
[java] view plain copy
  1. public class ThisDemo01 {  
  2.     public static void main(String[] args) {  
  3.         Person per = new Person("張三"20);  
  4.         System.out.println(per);  
  5.     }  
  6. }  
輸出結果:

[java] view plain copy
  1. 一個新的Person對象被實例化  
  2. 姓名:張三年齡:20  
2、super關鍵字

super調用父類中的構造方法,放在子類構造方法的首行;訪問父類的方法;訪問父類的屬性

實例

定義一個Person類

[java] view plain copy
  1. public class Person {  
  2.     private String name;  
  3.     private int age;  
  4.     public Person(){}  
  5.     public Person(String name, int age){  
  6.         this.name = name;  
  7.         this.age = age;       
  8.     }  
  9.     public String getName() {  
  10.         return name;  
  11.     }  
  12.     public void setName(String name) {  
  13.         this.name = name;  
  14.     }  
  15.     public int getAge() {  
  16.         return age;  
  17.     }  
  18.     public void setAge(int age) {  
  19.         this.age = age;  
  20.     }  
  21.     public String getInfo(){  
  22.         return "姓名:"+this.name+",年齡:"+this.age;  
  23.     }  
  24. }  
子類Student繼承父類,擴充:通過super()調用父類中的構造方法爲屬性賦值,子類新定義的屬性在子類中定義賦值

[java] view plain copy
  1. public class Student extends Person{  
  2.     private String school;//子類新定義的屬性  
  3.     public Student(String name, int age, String school){//子類及繼承的弗雷德屬性都傳進來  
  4.         super(name,age);//調用父類的構造函數爲name,age設置屬性內容  
  5.         this.setSchool(school);  
  6.     }  
  7.     public String getSchool() {  
  8.         return school;  
  9.     }  
  10.     public void setSchool(String school) {  
  11.         this.school = school;  
  12.     }  
  13. //  重寫父類中的方法  
  14.     public String getInfo(){  
  15.         return super.getInfo()+",學校:"+this.school;//擴充父類中的方法  
  16.     }  
  17. }  
測試:

[java] view plain copy
  1. public class SuperDemo {  
  2.     public static void main(String[] args) {  
  3.         Student stu1 = new Student("張三",22,"清華大學");  
  4.         System.out.println(stu1.getInfo());  
  5.     }  
  6. }  
輸出結果:

[java] view plain copy
  1. 姓名:張三,年齡:22,學校:清華大學  

3、this與super關鍵字對比

發佈了64 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章