1. 程式人生 > >Java 多型 (一)

Java 多型 (一)

多型時為了提高程式碼複用率和可讀性存在的, 簡單點說,就是同一個方法可以呼叫同一個父類的不同子類的功能,這樣就避免了到每一個子類中去寫這種相同的方法,具體實現見如下程式碼片段:
Person.java

package shunli.li.duotai;

public class Person {
	private String name;			//定義名稱
	public String getName(){		//get名稱
		return name;
	}	
	public Person(String name) {	//建構函式
		this.name = name;
	}
	public void inClass() {  		//"課堂方法"
		System.out.println("現在的人,都需要經歷課堂生活");
	}
}

Teacher.java

package shunli.li.duotai;

public class Teacher extends Person{
	public Teacher(String name) {			//建構函式
		super(name);						//呼叫父類建構函式完成構造
	}
	public void inClass() {					//在課堂上幹嘛
		System.out.println("我是老師"+getName()+",課堂上我交給學生知識");
	}
}

Student.java

package shunli.li.duotai;

public class Student extends Person{
	public Student(String name) {		//建構函式
		super(name);					
	}
	public void inClass() {				//在課堂上幹嘛
		System.out.println("我是學生"+getName()+",我正在課堂上學習");
	}
}

Main.java

package shunli.li.duotai;

public class Main {
	public static void doWhatInClass(Person person) {	//在課堂上做什麼方法
		person.inClass();
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	Student perStudent = new Student("李明");				//構造學生類,李明
	Teacher perTeacher = new Teacher("王老師");		//構造老師類,王老師
	/**
	*呼叫自己類的方法,沒得說,肯定是自己類的內容
	*/
	perStudent.inClass();				//呼叫學生類中的inclass()
	perTeacher.inClass();				//呼叫老師類中的Inclass()
	/**
	*老師和學生分別呼叫同一個doWhatInClass()方法,結果會怎麼樣內
	*/
	doWhatInClass(perStudent);			
	doWhatInClass(perTeacher);
	}

}

程式結果截圖
類自己呼叫和用同一個方法呼叫結果相同
結果顯示,兩種方法執行結果相同,這裡doWhatInClass方法就是用了多型,拿Student類來說,它是Person的子類,所有它可以上轉型為Person類,同時也隱藏了Student類未繼承的方法和屬性,Person類中具有inClass()方法,它發現Student類也同樣具有,因為其本質是Student類上轉型而來的所以會呼叫Student類的inClass();同理,Teacher類也是一樣過程;這裡注意如果父類具有的某種方法,子類沒有重寫,那麼儘管使用的多型,但是呼叫任然會是父類的那個方法,它也是到子類查找了的,然並卵,就呼叫自己的了。如果把doWhatInClass方法中的引數型別,換成了Object也行,因為它是終極父類,動手試一下。
在這裡插入圖片描述