解釋如下:
發表時間:2023-08-07 來源:明輝站整理相關軟件相關文章人氣:
[摘要]基類的方法(如此例中Base的構造函數)繼承到子類后(如果沒有被覆蓋),方法體中調用的方法將是子類覆蓋后的方法,而方法體中訪問的變量仍是基類的變量,如果基類的變量被隱藏了,則認為該變量為0。因此在n...
基類的方法(如此例中Base的構造函數)繼承到子類后(如果沒有被覆蓋),方法體中調用的方法將是子類覆蓋后的方法,而方法體中訪問的變量仍是基類的變量,如果基類的變量被隱藏了,則認為該變量為0。因此在new Extension()時,首先因為調用基類的構造函數,而執行的是子類add(3),同時由于基類的j變量被覆蓋了而被當作是0,因此add(3)后,i=3*3+0,所以輸出:In base,i:9。接著執行子類自己的構造函數,執行add(2),此時訪問的變量就是子類自己的了,因此9+2*3+4=19,所以輸出:In Extension,i:19。最后執行b.add(6)。因為b實際引用的Extension類型的對象,因此執行的也就是子類的add()方法,從而得到:19+6*3+4=41。因此最后有i=41。
再舉個例,如果子類中同時也聲明一個i變量,那么最后print()方法(因為沒有被覆蓋。)無論如何輸出的都是0。
這方面的知識,我感覺有點錯綜復雜.
表達能力不好.:)不過希望你能慢慢琢磨透.