Java 多型 (一)
阿新 • • 發佈:2018-11-13
多型時為了提高程式碼複用率和可讀性存在的, 簡單點說,就是同一個方法可以呼叫同一個父類的不同子類的功能,這樣就避免了到每一個子類中去寫這種相同的方法,具體實現見如下程式碼片段:
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也行,因為它是終極父類,動手試一下。