簡體   English   中英

當我們使用多態性時,Memory 是如何工作的?

[英]How does the Memory work when we use Polymorphism?

有一種類似的博客,但我從不同的角度感興趣。

考慮這兩個類

public class Parent {
    int x;

    public Parent(int x) {
        this.x = x;
    }
}
public class Child extends Parent {
    int y;

    public Child(int x, int y) {
        super(x);
        this.y = y;
    }
}

在主要方法中

        Parent obj = new Child(1, 2);
        Child childObj = (Child) obj;
        System.out.println(childObj.x + " " + childObj.y);

如果我們看一下,即使我們從根本無法存儲yParent開始一切(如您所見,它只有x字段),我們也可以取回我們的xy

當我們用Parent創建一個Child object 時,額外的變量y go 在哪里(因為Parent只能存儲變量x )?

據我所知,堆棧中有一個Parent引用了堆中的Child ,它保存了xy和調用new的 class 。

你能驗證、否認、擴展我的想法嗎?

Java 只為引用類型提供多態性。 也就是說, Parent類型的變量僅包含對位於其他位置的 object 的引用。 隨着時間的推移,同一個引用可以引用不同的對象,這些對象可能具有不同的子類型和大小。

也就是說,當您執行Parent obj = new Child(1,2)時,會創建一個Child類型的 object,除了它聲明的字段 ( y ) 之外,它還存儲從其超類型 ( x ) 繼承的字段。

稍后訪問parent.x時,JVM 讀取引用,並找到對應的 object,然后繼續讀取其x 為了簡化此過程,大多數 VM 將x字段針對Parent的所有子類型保留在同一位置,因此 VM 可以以相同的方式讀取該字段,而與對象的實際類型無關。

暫無
暫無

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

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