閱讀79 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java麵向對象高級--繼承的進一步研究

1、子類對象的實例化過程


class Person{					// 定義Person類
	private String name ;		// 定義name屬性
	private int age ;			// 定義age屬性
	public Person(){
		System.out.println("父類Person中的構造。") ;
	}
	public void setName(String name){
		this.name = name;	
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
};
class Student extends Person{					// 定義Student類
	private String school ;		// 定義school屬性
	public Student(){
		super() ;	// 默認隱藏
		System.out.println("子類Student中的構造。") ;
	}
	public void setSchool(String school){
		this.school = school ;
	}
	public String getSchool(){
		return this.school ;
	}

};
public class InstanceDemo{
	public static void main(String arsg[]){
		Student stu = new Student()	;// 實例化子類對象
		stu.setName("張三") ;	// 此方法在Student類中沒有明確定義
		stu.setAge(30) ;
		stu.setSchool("清華大學") ;
		System.out.println("姓名:" + stu.getName() + ",年齡:" + stu.getAge() + ",學校:" + stu.getSchool() ) ;
	}
};

對於子類的構造方法中,隱藏了super的語句,有時也將父類稱為超類。

2、方法的覆寫



class Person{		// 定義父類
	private void print(){	// 默認的訪問權限
		System.out.println("Person --> void print()。") ;
	}
	public void fun(){	// 定義一個fun方法
		this.print() ;	// 調用print()方法
	}
};
class Student extends Person{	// 定義繼承關係
	void print(){	// 覆寫父類中的方法
		// super.print() ;	// 訪問父類中被子類覆寫過的方法
		System.out.println("Student --> void print()。") ;
	}
};
public class OverrideDemo04{
	public static void main(String args[]){
		Student s = new Student() ;
		s.fun() ;
	}
};

此時,方法並沒有被覆寫,而是相當於在子類中又重新定義了一個新的方法。

3、屬性的覆蓋

class Person{		// 定義父類
	public String info = "MLDN" ;	// 定義一個公共屬性
};
class Student extends Person{	// 定義繼承關係
	public String info = "LXH" ;	// 定義了一個與父類中屬性名稱一致的屬性
	void print(){	// 覆寫父類中的方法
		System.out.println("父類中的屬性:" + super.info) ;
		System.out.println("子類中的屬性:" + this.info) ;
	}
};
public class OverrideDemo05{
	public static void main(String args[]){
		Student s = new Student() ;
		s.print() ;
	}
};

4、方法的覆寫與重載的區別


5、super關鍵字

super表示從子類中調用父類中的操作:如,調用屬性,方法,構造等等。
子類在實例化的時候,默認會調用父類中的無參構造,如果希望調用有參構造,則必須在子類中明確的聲明。
class Person{					// 定義Person類
	private String name ;		// 定義name屬性
	private int age ;			// 定義age屬性
	public Person(String name,int age){
		this.setName(name) ;
		this.setAge(age) ;
	}
	public void setName(String name){
		this.name = name;	
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
	public String getInfo(){
		return "姓名:" + this.getName() + ";年齡:" + this.getAge() ;
	}
};
class Student extends Person{					// 定義Student類
	private String school ;		// 定義school屬性
	public Student(String name,int age,String school){
		super(name,age) ;	// 明確調用父類中有兩個參數的構造
		this.school = school ;
	}
	public void setSchool(String school){
		this.school = school ;
	}
	public String getSchool(){
		return this.school ;
	}
	public String getInfo(){
		return super.getInfo() + ";學校:" + this.getSchool() ;
	} 

};
public class SuperDemo01{
	public static void main(String arsg[]){
		Student stu = new Student("張三",30,"清華大學")	;// 實例化子類對象
		System.out.println(stu.getInfo()) ;
	}
};



最後更新:2017-04-03 15:21:51

  上一篇:go 我的第一篇博客
  下一篇:go servlet小結 請求轉發和重定向的區別