Java學習筆記68——多型向下轉型
阿新 • • 發佈:2021-12-11
多型向下轉型
多型的前提
1、要有繼承的關係
2、子類要重寫父類中的方法
3、要有父類的引用指向子類物件
多型的弊端:
多型無法使用子類特有的方法
class Father1{ public void fun(){ System.out.println("這是父類中的fun方法"); } } class Son1 extends Father1{ public void fun(){ System.out.println("這是子類中的fun方法"); } public void show(){ System.out.println("這是子類中特有的show方法"); } } public class PolymorphicDemo1 { public static void main(String[] args) { //多型建立子類物件 Father1 f = new Son1(); f.fun();//這是子類中的fun方法(多型與成員方法的關係:編譯看左,執行看右) //需求:現在我想呼叫子類中特有的方法,咋辦 //f.show(); } }
需求:現在我想呼叫子類中特有的方法,咋辦
f.show();
多型的弊端:
多型無法使用子類特有的方法
我就想使用子類特有的功能,能否使用? 能
使用子類特有功能的方法
1、建立對應的子類並呼叫方法
可以,但是不推薦,很多時候會佔用堆記憶體空間
class Father2 { public void fun() { System.out.println("這是父類的fun方法"); } } class Son2 extends Father2 { public void fun() { System.out.println("這是子類的fun方法"); } public void show() { System.out.println("這是子類的show方法"); } } public class PolymorphicDemo2 { public static void main(String[] args) { Son2 son2 = new Son2(); son2.show();
2、java提我們考慮到了這一點,提供了一個技術給我們使用:向下轉型
把父類的引用強制轉換成子類的引用
子類類名 變數名 = (子類類名)父類的引用
class Father2 { public void fun() { System.out.println("這是父類的fun方法"); } } class Son2 extends Father2 { public void fun() { System.out.println("這是子類的fun方法"); } public void show() { System.out.println("這是子類的show方法"); } } public class PolymorphicDemo2 { public static void main(String[] args) { //多型建立子類物件(向上轉型) Father2 f = new Son2(); f.fun(); //多型中的向下轉型 Son2 s = (Son2) f; s.show(); } }
物件之間轉型的問題:
1、向上轉型
其實就是多型建立物件的寫法
Fu f = new Son();
2、向下轉型
Son s = (Son)f;
基本資料型別之間的強轉:
int a = 10;
byte b = (byte)a;
向下轉型的注意事項:
要求必須是存在繼承關係的
class Father2 {
public void fun() {
System.out.println("這是父類的fun方法");
}
}
class Son2 extends Father2 {
public void fun() {
System.out.println("這是子類的fun方法");
}
public void show() {
System.out.println("這是子類的show方法");
}
}
class Demo{
}
public class PolymorphicDemo2 {
public static void main(String[] args) {
Father2 f = new Son2();
Demo d = (Demo) f;//報錯。Demo類與Father2類不存在繼承的關係
}
}