亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java 繼承的問題

java 繼承的問題

MYYA 2019-03-01 10:36:44
// 父類 class Sup { int a = 8; public void printA(){ System.out.println(a); } Sup(){ printA(); } } //子類 class Sub extends Sup{ int a = 9; Sub(){ printA(); } public static void main(String[] args) { new Sub(); } } 為什么兩次輸出的都是 8 ,按照多態的概念,在子類構造函數中調用者應該是子類對象,訪問的也因該是是子類對象的屬性9。是不是我理解多態和繼承有毛病。
查看完整描述

11 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

子類中定義和父類重名的屬性并不會覆蓋父類的原有屬性,兩者是共存的,父類方法中使用的屬性來自父類定義的,printA雖然在子類中調用,但使用的仍然是父類中的a,想使用子類中的a,可以在子類中重寫這個printA方法

查看完整回答
反對 回復 2019-03-01
?
www說

TA貢獻1775條經驗 獲得超8個贊

你得先知道執行的順序,先執行構造方法(父類--->子類),再初始化非靜態變量

查看完整回答
反對 回復 2019-03-01
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

因為你子類調用的是父類的printA方法, 子類的構造函數中 首先需要實例化父類對象即super(),然后由于你子類沒有重寫父類的printA方法,所以你調用的是父類的方法,父類方法訪問父類的a,所以兩個輸出都是8

查看完整回答
反對 回復 2019-03-01
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

子類使用的是父類方法printA,而這個父類中的prontA所對應使用的參數a是父類中的變量,并不是子類中的
在并沒有重寫父類方法的前提下,是不會進行覆蓋原有父類執行方式的。
建議你斷點調試一下看看~

查看完整回答
反對 回復 2019-03-01
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

好像看到你問了兩次這個問題, 你的子類并沒有重寫父類的printA方法,所以兩次調用的都是父類的printA方法,所以都打印8

查看完整回答
反對 回復 2019-03-01
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

讓我幫你梳理一下new sub()后發生了什么,這里不牽扯到多態的問題,是一個純繼承的問題,
1.new sub(),編譯器執行這句話后,先找到sub這個類(并發現sub繼承與sup),然后找到sub的空構造函數,開始執行sub構造函數。
2.但在執行sub構造函數前,必須先執行父類的空構造函數,即輸出第一次8,。
3.父類構造函數執行完后,真正的子類構造函數來了。執行printA(),但是子類沒有重寫父類的printA方法,所以找到父類的printA來執行,這里的a還是父類的a,和子類的a沒有關系,故輸出第二次8。

(繼承不包括私有成員private,這里的a沒有具體些修飾符,默認就是private,所以你的子類并不是重寫了父類的a,而是自己聲明了自己的私有a)

有誤望指正。

查看完整回答
反對 回復 2019-03-01
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

1.new Sub()的時候會調用父類的構造函數,所以會有兩次print
2.printA()是父類的方法,是聲明在Sup這個類里的,System.out.println(a);打印的a不可能從跨過父親里去找子類的屬性a,因為java沒有這個特性。

查看完整回答
反對 回復 2019-03-01
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

或許你比較一下這個?你應該就知道他們之間的關系了。

// 父類
class Sup {
    private int a = 8;
    public void printA(){
        System.out.println(a);
    }
    Sup(){
        printA();
    }
}

//子類
class Sub extends Sup{
    Sub(){
        super();
        printA();
    }
    public static void main(String[] args) {
        new Sub();
    }
}
查看完整回答
反對 回復 2019-03-01
  • 11 回答
  • 0 關注
  • 532 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號