簡體   English   中英

將 object 從父母 class 類型轉換為孩子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM