java語言機制中的多型多型理解以及多型的向上轉型和向下轉型問題
阿新 • • 發佈:2018-11-19
多型中轉型問題往往不容易理解,特別是向上和向下轉型。
下面先說說多型的概念和前提:
1.要有繼承關係;
2.要有方法重寫;
3.要有父類引用指向子類物件;
如果是成員變數的話,編譯看左邊(父類),執行看左邊(子類);
如果是成員方法的話,編譯看左邊(父類),執行看右邊(子類);
如果是靜態方法的話,編譯看左邊(父類),執行看右邊(子類);
下面有一個例子可以說明:(輸出結果為John和談幾個億的大單子)
基本資料型別的自動提升和強制型別轉換的區別:
從基本資料型別出發,其實就可以類似地可以得出,多型中的父類引用指向子類物件實際上就是向上轉型;二也有多型向下轉型;
向下轉型的話就是要加上前面的轉型符號;(我想了一下,還是從最簡單的基本型別進行對比來看比較好)
public class Job {
public static void main(String[] args) {
System.out.println("我的工作是:");
}
public void say() {
System.out.println("工作");
}
}
先建一個job類,Job類的方法是say
再新增兩個類,Teacher和Student,都繼承Job;
public class Teacher extends Job{ public static void main(String[] args) { System.out.println("老師"); } }
public class Student extends Job{
public void say() {
System.out.println("學生");
}
}
最後再寫個Test類來例項化呼叫
下面我們來測試下多型,父類指向子類具體實現
public class Test { public static void main(String[] args) { /*父類指向Student類的具體實現 * 由子類Student指向父類Job,向上轉型 * */ Job job = new Student(); job.say(); /*向下轉型 * 由Student轉向job,按照提示新增在job前新增(Student) * */ Student student = (Student) job; student.say(); /*向下轉型,因為job指向的是Student具體實現, 所以會報錯*/ Teacher teacher = (Teacher) job; teacher.say(); } }