3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
私有成員不會(huì)被繼承。
我認(rèn)為這可能是您在這里遺漏的關(guān)鍵點(diǎn)。這意味著Child.fun不會(huì)覆蓋Parent.fun. 它們只是兩個(gè)簡(jiǎn)單的舊方法,彼此無關(guān)。
當(dāng)你調(diào)用時(shí)accessFun,控制總是進(jìn)入下面的這段代碼Parent:
public void accessFun(){
System.out.println(this);
this.fun(); <---- here
}
現(xiàn)在,因?yàn)槲覀儸F(xiàn)在在里面Parent,我們可以訪問fun. 而且,由于Parent.fun是沒有被覆蓋,它調(diào)用Parent.fun而不是Child.fun。
我認(rèn)為 fun 是子類中的私有成員,因此無法從類外部訪問(甚至可以從其父類的公共成員訪問)。
那是完全的誤解。如果不能從類的外部訪問私有成員,甚至不能通過公共方法訪問,那么它們的用處就會(huì)小得多。為什么首先要擁有它們?
“私有成員只能由在同一類中聲明的成員訪問”可能更好記住。

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為 fun 是子類中的私有成員,因此無法從類外部訪問(甚至可以從其父類的公共成員訪問)。
有時(shí)一切都來自“外部”。例如,main
呼叫來自外部。
如果不能從外部訪問私有成員,則它始終是死代碼,這是沒有意義的。
區(qū)別在于對(duì)直接訪問和間接訪問的理解。
在所有情況下,您都可以通過 method 非直接調(diào)用該方法accessFun()
。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
parent 中的 fun 方法是私有的,子 fun() 方法不會(huì)覆蓋父 fun() 方法。但是 accessFun 方法是公共的,因此它可以從子類中調(diào)用并且可以公開訪問。
因此,當(dāng)您調(diào)用 accessFun() 方法時(shí),它將調(diào)用父類 fun() 方法。不是子類 fun() 方法,因?yàn)樗撬接械?。這就是為什么你不會(huì)出錯(cuò)的原因。
添加回答
舉報(bào)