簡體   English   中英

關於子類和超類

[英]It's about subclass and superclass

我想問一些概念:
子類的對象屬於父超類。 父類的方法是否存在於子類的內存中? 也就是說,將父類的屬性和方法復制到子類?或者子類對象如何操縱父類的屬性和方法?

謝謝。

子類的對象屬於父超類。

“屬於”是較差的術語。 更好的說法是,作為類C 實例的對象也是C的直接超類的實例 (實際上,它是C 所有超類的實例 。)

父類的方法是否存在於子類的內存中?

您在這里有一個基本的誤解。 方法在類的內存中不存在。 或實例的內存。

它們實際上分別保存在與類和實例分離的內存中。

與您所說的最接近的是,類描述符將包含對方法的內部引用 但這一切都是看不見的,細節不應該與您有關。

相反,對象(由類定義)的(非static )屬性實際上是對象的一部分。 實際上,子類和所有超類定義的屬性屬於同一對象。

這樣想:

  • 動物有腿。
  • 貓是動物。
  • 狗是動物。
  • 貓有胡須。
  • 狗的小動物的腿是小動物的一部分。
  • 蓬松的貓的腿是蓬松的一部分。
  • 貓蓬松的胡須是蓬松的一部分。

子類對象如何操縱父類的屬性和方法?

對象不“操縱”方法。 他們稱呼他們。 它們的調用方式取決於實現,但是從概念上講 ,它們是在類描述符中找到的。

方法通過經由對象的引用查看對象來訪問屬性。 由於子類和超類屬性都屬於同一個對象(請參見上文!),因此它們的訪問方式相同。

它只是從字面上擴展它。 就像您將超類主體並為其添加子類代碼以創建新類一樣。

還有像有2個版本的相同的方法在等子類能力一些細微的差別methodA()super.methodA()或該實例的Subclass可以被看作是SubclassSuperclass (多態性)。

但是總的來說,您可以通過具有所有屬性和子類定義的子類來考慮它。

暫無
暫無

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

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