簡體   English   中英

在這種情況下,鑄造如何工作?

[英]How does casting work in this situation?

假設我有兩節課。

public class example1 {

    private int a;
    private String b;

    public example1(int a, String b) {
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }
    public String getB() {
        return b;
    }
} 


public class example2 extends example1 {

    public example2(int a, String b) {
        super(a, b);
    }

    @Override
    public int getA() {
        return 10;
    }
}

現在,如果我繼續將cast2轉換為example 1。

example1 a = (example1) new example2(5, "Hi");

a.getA()將返回什么?

進一步的問題是,example2是否看起來像這樣。

public class example2 extends example1 {

    public example2(int a, String b) {
        super(a, b);
    }
    @Override
    public int getA() {
        return getAModified();
    }
    public int getAModified() {
        return 10;
    }
}

a.getA()將返回什么? 這里會發生什么,更重要的是為什么會發生?

a.getA()將返回什么?

將執行example2的getA()方法,即10。

即使在第二種情況下,它也會返回10。

原因是方法覆蓋

它在運行時決定,哪個getA()方法被調用。
由於您正在創建Example2的對象,因此在兩種情況下都將調用Example2的getA(),它會覆蓋Example1的getA()方法。

您可以將Example2的對象強制轉換為Example1,因為它是父類,但不會改變該對象實際上是Example2的事實。

a.getA()將返回什么?

將為您提供example2的結果,因為您是使用class example2 實例化

這里發生什么

example1 a = (example1) new example2(5, "Hi");

您正在創建類型為example1的實例,其中實例為實現example2 並轉換為example1

投射顯示使用一種類型的object代替另一種類型的object 而已。 它不會神奇地將實例化的對象轉換為強制轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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