在什么網站可以做外貿出口勞保鞋sem廣告投放是做什么的
在Java中,類型轉換主要涉及到兩種類型:向上類型轉換(Upcasting)和向下類型轉換(Downcasting)。
1. 向上類型轉換(Upcasting):
向上類型轉換是將子類的對象轉換為父類類型的對象。這種轉換是自動的,也是安全的,因為子類對象包含所有父類對象的信息。所以,在將子類對象賦值給父類類型的引用時,編譯器會自動完成轉換,而不需要程序員進行任何特殊的操作。向上轉型會讓子類對象“縮小”,只能調用父類中的方法,對于子類中新增的方法則不可調用了。
package com.test2;class Animal {void makeSound() {System.out.println("這個動物在發(fā)出聲音。");}
}class Dog extends Animal {void makeSound() {System.out.println("這個狗在汪汪叫。");}void makeMove() {System.out.println("這個狗在歡快地奔跑。");}
}public class UpcastingTest {public static void main(String[] args) {Dog myDog = new Dog();myDog.makeSound();myDog.makeMove();Animal myAnimal = myDog; // 向上類型轉換,安全并自動發(fā)生myAnimal.makeSound(); // }
}
在上面代碼這個例子中,`Dog`是`Animal`的子類。當我們創(chuàng)建一個`Dog`對象并將其賦值給`Animal`類型的變量時,就發(fā)生了向上類型轉換。myAnimal變量是賦值為原myDog對象變量轉換后的值。則myAnimal失去了子類Dog中新增的方法makeMove()。
但是子類Dog重寫了父類Animal的MakeSound()方法,Dog類實例對象myDog轉換為Animal類對象賦值給myAnimal對象是失去了新增方法,但是調用的makeSound()方法依然是Dog類中重新寫的方法。如果Dog類中沒有重寫makeSound()方法,轉化前和轉換后,都將是調用父類中的方法。
2. 向下類型轉換(Downcasting):
在Java中,要成功進行向下轉型(從父類到子類),必須滿足以下兩個條件:
(1)對象必須是子類的實例:
? ?對象實際上必須是你要轉型的子類的一個實例。如果對象不是子類的實例,那么轉型會失敗,并拋出`ClassCastException`異常。
(2)顯式類型轉換:
? ?必須使用類型轉換操作符`(子類類型)`來進行向下轉型。編譯器會檢查轉型的合法性,并且在運行時也會進行類型檢查。
下面是一個成功向下轉型的例子:
class Animal {void makeSound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {void bark() {System.out.println("Dog barks");}
}public class Main {public static void main(String[] args) {// 創(chuàng)建一個Dog對象Animal animal = new Dog();// 檢查對象是否實際是Dog的實例if (animal instanceof Dog) {// 顯式向下轉型為Dog類型Dog dog = (Dog) animal;// 現在可以調用Dog類特有的方法dog.bark();} else {// 如果不是Dog的實例,則不執(zhí)行轉型System.out.println("Cannot cast to Dog");}}
}
在這個例子中,`animal`變量被聲明為`Animal`類型,但實際上它引用了一個`Dog`對象。通過`instanceof`檢查,我們確認`animal`實際上是`Dog`的一個實例,然后安全地將其轉型為`Dog`類型。轉型成功后,我們就可以調用`Dog`類中的方法了。
總之,成功向下轉型的關鍵在于確保對象確實是你想要轉型的子類的一個實例,并且在轉型前使用`instanceof`來驗證這一點。如果不確定對象是否是特定子類的實例,就應該避免進行向下轉型,以防止運行時錯誤。
簡單理解:
(1)向上轉換:子類創(chuàng)建的實例變量賦值給一個父類類型的變量,這是合法允許的,但是會進行“向上轉換”,父類類型的變量雖然被賦值了子類實例,但是會閹割掉子類中新增的方法,和父類相同的方法依然可以使用,使用的是子類中定義的方法。
(2)向下轉換:這是不建議的,需要滿足2個條件才可以,否則發(fā)生會失敗而發(fā)出異常。兩個條件是父類定義的變量是通過實例化子類賦值的(只是該變量被聲明成了父類的類型),經過顯式的類型轉化后,重新轉換為子類類型的變量,可以使用子類中定義的相關方法。