[英]It's about subclass and superclass
我想問一些概念:
子類的對象屬於父超類。 父類的方法是否存在於子類的內存中? 也就是說,將父類的屬性和方法復制到子類?或者子類對象如何操縱父類的屬性和方法?
謝謝。
子類的對象屬於父超類。
“屬於”是較差的術語。 更好的說法是,作為類C
實例的對象也是C
的直接超類的實例 。 (實際上,它是C
的所有超類的實例 。)
父類的方法是否存在於子類的內存中?
您在這里有一個基本的誤解。 方法在類的內存中不存在。 或實例的內存。
它們實際上分別保存在與類和實例分離的內存中。
與您所說的最接近的是,類描述符將包含對方法的內部引用 。 但這一切都是看不見的,細節不應該與您有關。
相反,對象(由類定義)的(非static
)屬性實際上是對象的一部分。 實際上,子類和所有超類定義的屬性都屬於同一對象。
這樣想:
子類對象如何操縱父類的屬性和方法?
對象不“操縱”方法。 他們稱呼他們。 它們的調用方式取決於實現,但是從概念上講 ,它們是在類描述符中找到的。
方法通過經由對象的引用查看對象來訪問屬性。 由於子類和超類屬性都屬於同一個對象(請參見上文!),因此它們的訪問方式相同。
它只是從字面上擴展它。 就像您將超類主體並為其添加子類代碼以創建新類一樣。
還有像有2個版本的相同的方法在等子類能力一些細微的差別methodA()
和super.methodA()
或該實例的Subclass
可以被看作是Subclass
和Superclass
(多態性)。
但是總的來說,您可以通過具有所有屬性和子類定義的子類來考慮它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.