[英]Typecasting an object from parent class to child
我對 Java 語言的類型轉換有誤解。 .問題是 。 例如,在這段代碼中,假設 Animal 是 Dog class 的父 class,
Animal animal = new Animal();
Dog dog = (Dog) animal;
after execution.執行后拋出 。 , considering that java example.但是,在研究 android 包時,我發現了一個關於類型轉換的示例,考慮到 java 示例,該示例應該拋出 。
EditText editText = (EditText) findViewById(R.id.edit_message);
method returns a class object, which is one of the superclasses of class.(from to ) The code runs fine.在此代碼中, 方法返回一個class object,它是 class 的超類之一。(從到 )代碼運行良好。 誰能解釋我是否犯了錯誤或這是怎么發生的?
提前致謝。
一旦你創建了一個對象,你就不能改變它的類型。 這就是為什么你不能將動物轉換為狗的原因。
但是,如果創建子類的對象,則可以在超類類型的變量中保留對它的引用,然后可以將其強制轉換為子類類型。
這將工作:
Animal a = new Dog ();
Dog d = (Dog) a;
在 Android 示例中,您有一個如下所示的布局資源:
<EditText
android:id="@+id/edit_message"
..."/>
此定義將導致 Android 創建EditText
的實例,因此您可以將findViewById
返回的視圖轉換為EditText
。 您不能將其轉換為不是EditText
超類型的任何其他內容。
基本上你不能將超類的實例轉換為子類,因為子類的實例尚不清楚。 Upcasting 是防止這種異常發生的可靠方法,因為我們現在正在處理代碼的多態性。
您必須先實例化一個子類:
Dog dog = new Dog;
我們可以將未找到的 Dog 類的方法隱藏到其父類 Animal 中,方法是將其轉換為超類:
Animal animal = (Animal) dog;
然后你可以將它向下轉換回你的子類 Dog 因為它的子類的實例是已知的:
Dog anotherDog = (Dog) animal;
你可以試試這個:
Base obj= new Derived();
Derived obj2= (Derived)obj;
希望這會有所幫助。
public class OverridingConcept {
public static void main(String[] args) {
// Up-Casting
Parent p = new Child();
Child c = (Child) p;
c.eat();
}
}
class Parent {
void show() {
System.out.println("Parent.Show");
}
void eat() {
System.out.println("Parent.Eat");
}
}
class Child extends Parent {
void show() {
System.out.println("Child.Show");
}
void sing() {
System.out.println("Child.Sing");
}
}
如果您想將父母更改為孩子,請使用以下代碼。
動物 a= 新動物 (); Dog d= Dog.valueof(a);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.