基類的方法(如此例中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。 |
溫馨提示:喜歡本站的話,請收藏一下本站!