天天看點

JAVA類的繼承學習筆記JAVA類的繼承學習筆記——稻草人

JAVA類的繼承學習筆記——稻草人

學習資料:《Java就業教育訓練教程》

Java類繼承的特點

1.Java隻支援單繼承,不允許多繼承,一個子類隻能有一個父類,不允許一個類直接繼承多個類,但一個類可以被多個類繼承,,即是類X不可以既繼承類Y又繼承類Z。

2.可以有多繼承,如:類B繼承了類A,類C又可以繼承類B,那麼類C也間接繼承了類A。

3.子類繼承父類的所有成員變量和成員方法,但不繼承父類的構造方法(構造方法是特殊的成員方法,他與類名相同,不傳回結果也不加void傳回值)。

4.在子類的構造方法中可以使用super()調用父類的構造方法,如下:

public class Student extends Person
{
	public Student(String name,int age,String school)
	{
		super(name,age);
		this.school = school;
	}
}
           

5.如果子類沒有顯式地調用父類構造方法,也沒有使用this關鍵字調用重載的其他構造方法,則在産生子類的執行個體對象時,系統預設調用父類無參數的構造方法。也就是,在下面的例子中,寫不寫super()語句效果是一樣的:

public class B extends A
{
	public B ()
	{
		super();//寫不寫,效果時一樣的
	}
}
           

如果子類構造方法沒有顯式地調用父類構造方法,二父類中又沒有無參數的構造方法(需要再次說明:如果父類沒有顯式地定義任何構造方法,系統将提供一個無參數的構造方法,相當于父類中又無參數的構造方法),則會編譯出錯。是以,通常情況下隻要定義了有參數的構造方法,一般還要再定義一個無參數的構造方法。

/**
 * 測試類的繼承特性
 * @author Administrator
 *
 */
class Person
{
	public String name;
	public int age;
	public Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	public Person() {}//如果這個構造函數不寫,則編譯會出錯
	public void getInfo()
	{
		System.out.println("name:"+name+" , age"+age);
	}
}
class Student extends Person{
	public void study()
	{
		System.out.println("好好學習,天天向上");
	}
	public static void main(String arg[])
	{
		Person p = new Person();
		p.name = "Person";
		p.age = 33;
		p.getInfo();
		
		Student s = new Student();
		s.name = "student";
		s.age = 10;
		s.getInfo();
		s.study();	
	}
}
           

子類對象執行個體化過程

1.配置設定成員變量的存儲空間,并進行預設的初始化,就是用new關鍵字産生對象以後,對成員變量用相應的關系對對象中的成員變量進行初始化指派。

2.綁定構造參數。

3.如果有this()調用,則調用相應的重載構造方法,(被調用的沖在構造方法又從步驟2開始執行這些流程),被調用的重載構造方法結束後回到目前的構造方法,然後直接跳到步驟6執行。

4.顯式或隐式追溯調用父類的構造方法(一直到Object類為止,Object是所有Java類的最頂層父類),父類的構造方法又從步驟2開始對父類執行這些流程,父類構造方法執行結束後,回到目前的構造方法,目前構造方法繼續往下執行。

5.進行執行個體變量的顯式初始化,也就是執行在定義成員變量時就對其進行指派的語句。String school = "NIT";

  6.執行目前構造方法的方法體裡面的程式代碼。

覆寫父類的方法

*覆寫的方法必須和被覆寫的方法具有相同的方法名稱,參數清單和傳回值類型。

*覆寫方法時,不能使用比父類中被覆寫的方法更加嚴格的通路權限。

繼續閱讀