JAVA 繼承中的this和super


      學習java時看了不少尚學堂馬士兵的視頻,還是挺喜歡馬士兵的講課步驟的,二話不說,先做實例,看到的結果才是最實際的,理論神馬的全是浮雲。只有在實際操作過程中體會理論,在實際操作過程中升華理論才是最關鍵的,產生的印象才是最深的。針對文章標題,先看一下以下代碼:

public class FatherChild {	
	public static void main(String[] args) {	
		//	主方法開始		
		Child c = new Child();				
		//  實例化	
		}
                              }



class Father {	
	public Father() {	
		 System.out.println("父類無參構造函數");
		}	
	    public Father(String name) {	
			System.out.println("父類有參構造函數");	
			}
	  }




  class Child extends Father {	
	public Child() {
		this("dd");	
		System.out.println("子類無參構造函數");
		}	
	public Child(String name) {	
		super("dd");	
		System.out.println("子類有參構造函數");
		} 
	}
	

 代碼運行的結果:

父類有參構造函數
子類有參構造函數
子類無參構造函數

為什么會有以上的結果呢?讓我們先了解一下java的繼承:

繼承是一種由已有的類創建新類的機制。利用繼承,可以先創建一個擁有共同屬性的一般類,根據該一般類再創建具有特殊屬性的新類。由繼承而得到的類稱為子類(Subclass),被繼承的類被稱為父類(Superclass)。

直接或間接被繼承的類都是父類。子類繼承父類的狀態和行為,同時也可以修改父類的狀態和行為,並添加新的狀態和行為。Java中不支持多重繼承。

      以上代碼中Child類繼承了Father類,在FatherChild類中執行Child c = new Child();時,會調用Child類的無參構造方法,在其無參的構造方法中有這樣一句代碼:this("dd");這又是神馬意思呢?這時我們就有必要來了解一下java繼承中this與super關鍵字的作用了:

this的第一個作用 
java中在一個構造方法中可以調用一次其他的構造方法,並且這條語句必須在這個構造方法的第一行,this表示調用它的對象
this的第二個作用
表示引用成員變量i(而不是形參i)
將局部變量或形參賦值給成員變量的這種情況,通常可以省略this,如寫為:i=i;
java編譯器會自動將=左邊的i
當成成員變量,=右邊的當成形參。但不利於閱讀代碼
this的第三個作用
返回當前對象

super的用法與this類似,主要用於調用父類構造方法

 對於繼承中的構造方法有以下說明:


1.子類的構造過程中必須調用其基類的構造方法;
2.子類可以在自己的構造方法中使用super(argument_list)調用基類的構造方法;
  如果調用super,必須寫在子類構造方法的第一行;
3.如果子類的構造方法中沒有顯式調用基類構造方法,則系統默認調用基類無參數的構造方法;
4.如果子類構造方法中既沒有顯式調用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯。

 

那么我們就可以明白,child類中無參構造方法中的this("dd");這句代碼其實是調用了Child類中的有參構造方法,而其有參構造方法中又super(“dd”);調用了父類的有參構造方法,所以才有了以上的打印結果。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM