![](/img/trans.png)
[英]How to call an Object's Method from another class without creating a sub-class and/or inheriting class?
[英]How does the parent class's defined method get called in a sub-class object?
這更像是一個與實現相關的問題,或者我可能想多了。 假設我有一個繼承自父 class 的子類。 據我了解,它將繼承父 class 的方法定義,而不是構造函數。 我們需要提供或者編譯器會通過super方法調用提供構造函數。 我們這樣做的原因是我們從子 class 中的父 class 獲得的方法定義將不存在,如果沒有父 class ZA8CFDE6331BD5B62AC69
這是否意味着,當我調用父 class object 定義的尚未在子類中覆蓋的方法時,將在父 object 實例的子類內部內部調用? 我在想會是這種情況,因為子類確實調用了父 class 構造函數並創建了它的實例。
我認為您被“構造函數”一詞誤導了。 如果措辭是“初始化器”,恕我直言,那會更清楚 - 但既定術語是“構造器”。
如果您的子類Sub
擴展了父 class Parent
,則創建Sub
實例不會創建第二個單獨的Parent
實例。
當您的Sub
構造函數調用super()
構造函數時,這僅意味着Parent
class 中描述的方面會按照Parent
構造函數想要的方式進行初始化,例如用適當的值填充Parent
中定義的字段。 這個super()
構造函數調用不會構造/創建新實例,而是初始化唯一實例的Parent
定義部分,這就是為什么我認為“構造函數”這個名稱具有誤導性。
在super()
調用之后,您的Sub
構造函數可以自由地輪到它。 所有這些都發生在一個結合了兩個類的字段(和方法)的實例上。
因此,當您在Sub
實例上調用Parent
定義的方法時,沒有可能接收調用的不同Parent
實例,這一切都發生在單個Sub
實例上。 由於該方法是在Parent
Parent
Sub
擴展一無所知,例如,不能訪問 Sub 中定義的字段(除非使用反射之類的“骯臟技巧”)。
如果您願意,您可以將Sub
實例視為Parent
實例,其中一些字段和方法已添加到末尾。 Parent
定義的方法作用於實例的Parent
部分(1),而Sub
方法查看完整的實例。
我們這樣做的原因是我們從子 class 中的父 class 獲得的方法定義將不存在,如果沒有父 class ZA8CFDE6331BD5B62AC69
所以,這不是真的。 “父 class object 實例”不存在(至少在與子類不同的實例意義上不存在),它是子類實例的第一部分,然后是子類字段。
(1) 有一些注意事項,例如,如果在Sub
class 中覆蓋了Parent
方法,但恕我直言,這超出了此問題的 scope。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.