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.執行當前構造方法的方法體裏面的程序代碼。

 

覆蓋父類的方法

*覆蓋的方法必須和被覆蓋的方法具有相同的方法名稱,參數列表和返回值類型。

 

*覆蓋方法時,不能使用比父類中被覆蓋的方法更加嚴格的訪問權限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章