一、向上轉型
1、什麼是向上轉型
向上轉型是將子類類型的引用賦值給父類類型的引用的過程,即將具有某個特定子類型的對象的引用賦給對其進行了聲明的父類型的引用。這樣做是安全的,因為子類型對象總是能夠完全符合父類型對象的需求。
2、向上轉型的語法
父類類型 引用名稱 = new 子類類型();
3、向上轉型的示例代碼
class Animal{ public void move(){ System.out.println("move animal"); } } class Dog extends Animal{ public void move(){ System.out.println("move dog"); } public void bark(){ System.out.println("dog barks"); } } public class Test{ public static void main(String[] args){ Animal animal = new Dog(); //向上轉型 animal.move(); //輸出結果:move dog //不能引用子類Dog類獨有的方法bark } }
二、向下轉型
1、什麼是向下轉型
向下轉型是將父類類型的引用轉換為子類類型的引用。當我們使用向上轉型創建了一個父類引用指向子類的對象後,如果要使用子類特有的方法或屬性的話則就必須進行向下轉型。
2、向下轉型的語法
子類類型 引用名稱 = (子類類型) 父類類型引用名稱;
3、向下轉型的示例代碼
class Animal{ public void move(){ System.out.println("move animal"); } } class Dog extends Animal{ public void move(){ System.out.println("move dog"); } public void bark(){ System.out.println("dog barks"); } } public class Test{ public static void main(String[] args){ Animal animal = new Dog(); //向上轉型 if(animal instanceof Dog) { Dog dog = (Dog) animal; //向下轉型 dog.bark(); //輸出結果:dog barks } } }
三、instanceof關鍵字
1、什麼是instanceof關鍵字
instanceof是Java中的一個二元運算符,用於在運行時確定某個對象是否是一個特定類的一個實例。
2、使用場景
在向下轉型時,如果沒有使用instanceof關鍵字進行類型判斷,就有可能會在運行時拋出ClassCastException異常。
3、示例代碼
class Animal{ public void move(){ System.out.println("move animal"); } } class Dog extends Animal{ public void move(){ System.out.println("move dog"); } public void bark(){ System.out.println("dog barks"); } } public class Test{ public static void main(String[] args){ Animal animal = new Animal(); //創建Animal對象 if(animal instanceof Dog) { Dog dog = (Dog) animal; //向下轉型 dog.bark(); //不會執行到此行代碼 }else{ System.out.println("animal is not a dog"); //輸出結果:animal is not a dog } } }
四、總結
Java中的子類轉父類和父類轉子類都是非常常用的操作。當我們需要使用子類特有的方法或屬性時,就需要進行向下轉型,而在進行向下轉型時需要使用instanceof關鍵字進行類型判斷,以避免拋出ClassCastException異常。向上轉型可以使代碼更加靈活,並且降低了耦合度,使代碼更加易於維護。
原創文章,作者:NXQXV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361918.html