轉自:
http://www.java265.com/JavaCourse/202206/3756.html
java多型詳解 下文筆者將詳細介紹java多型,如下所示何為多型呢?
多型指: 一個同型別的物件,執行同一行為,但是表現出不同的行為內容
多型的常見形式
多型示例: 父型別別 物件名稱 = new 子類構造器; 介面 物件名稱 = new 實作類構造器;例:
//父類:
public class User {
public String name ="用戶";
void run(){
}
}
//子類1:
public class Student extends User{
public String name = "學生";
@Override
void run() {
System.out.println("student run!");
}
}
//子類2:
public class Teacher extends User{
public String name = "老師";
@Override
void run() {
System.out.println("teacher run");
}
}
//main方法:
public static void main(String[] args) {
User a1 = new Student();
User a2 = new Teacher();
a1.run();
a2.run();
System.out.println(a1.name);
System.out.println(a2.name);
}
多型中成員訪問特點
方法呼叫 編譯看左 運行看右例:
在編譯的時候 先訪問"User a1 = new Student();" 左邊“User父類”中的方法 在運行的時候,會訪問右邊"Student子類"中的方法
多型的優點
1. 在多型形式下,右邊物件可以解耦合,便于擴展和維護
User a = new Student();
User a = new Teacher();
a.run();//當業務行為隨物件而變,只需增加實作類
2.在方法定義時,使用父類作為引數型別,則方法可接收父類的一切子類
多型的缺點
多型下不能使用子類的獨有功能 只能使用公共的功能
多型情況下,如何使用子類的特有功能呢
實作思路:
直接為接收到的型別變數,做型別轉換為子類,即可使用子類中獨有的功能
注意事項:
當型別轉換失敗時,會出現ClassCastException例外
筆者建議,在轉換前使用 instanceof進行型別判斷
型別轉換的方式分享
自動型別轉換
User s = new Student(); s.run();
強制型別轉換
子類 物件變數 = (子類)父型別別變數 User s1 = new Student(); //s1.run(); × Student s2 = (Student)s1; s2.run();// √
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492480.html
標籤:其他
上一篇:golang的defer踩坑匯總
