回覆列表
  • 1 # 江南洛書

    繼承是複製還是共用?例如 Dog類繼承Animal類,在Dog中的屬性修改,Animal中的屬性也會一起改變嗎?如果用Dog和Animal分別例項化物件,dog和animal,這兩者的屬性是公用還是各佔記憶體,毫無關係?另外要對子類繼承的屬性賦值,透過super(),最終跳到父類構造器,此時,是不是建立了一個父類物件?

    1、共用更恰當,因為父類的一些私有方法和私有屬性是不會被繼承的,繼承之後,子類可以共用父類的公有屬性和公有方法,,

    2、Dog中如果沒有重新定義父類已有的同名屬性,則修改公有屬性就是修改父類的公有屬性,即父類的屬性會一起改變,,

    3、如果兩者都例項化,肯定是兩個不同的物件,記憶體地址不可能共用的,就算是Dog例項化多次也是隻是多個不同的物件,記憶體地址是不一樣的,,

    4、super其實就是一個區分標誌,不會新建物件的,,,super()只是呼叫父類的無參構造方法,因為子類也有無參構造方法,,只要是子類要呼叫在父類中有同名同參的方法或者同名的屬性,都要用到super來區分,,

  • 2 # 使用者3338238942088

    首先的話,在 Java 中我們應該說“擴充套件”(extend)而不是“繼承”(inherit),儘管我們知道它實現上就是C++那種繼承,但邏輯上是不完全相同的。再考慮到介面即協議,對介面的擴充套件,或是說對協議的擴充套件,實際上就包括了對其公用方法的擴充套件以及對其定義的擴充套件兩個方面,其中擴充套件介面定義實際上即為對協議新增更多的約束,在減少了其可能包含的類的種類的同時也給了這些類更清晰的定義,也就允許使用者基於這更清晰的定義做出更多的操作了。所以呢,實際類的擴充套件實際上和繼承是相同的,子類確實繼承了父類的實現,但介面的擴充套件則只會獲取到父介面的方法宣告,繼承的意味並不明顯,更多的實際上在於對其原協議的擴充套件,因此我們應將子介面和父介面間的關係視為擴充套件而不單單是繼承其實就是多去思考為什麼在Java這叫擴充套件不叫繼承,很多問題就迎刃而解了

  • 中秋節和大豐收的關聯?
  • hermes愛馬仕手鐲怎麼辨真偽?