[問題] 關於private的繼承問題
版友好
我是java新人,想請版友幫忙釐清一個觀念
下面有個father類別
有一個私有成員和一個公開方法
此公開方法會使用到這個私有成員
然後child類別 繼承father
class father {
private String member = "father";
public String getMember(){
return member;
}
}
class child extends father{
}
public class testMain {
public static void main(String[] args) {
child c = new child();
System.out.println(c.getMember());
}
}
依照我原本的觀念
child會繼承一份 public 的 getMember到自己身上
不過private的member就不會繼承到自己身上
因此我去呼叫child的getMember的時候
由於找不到自己身上的member,所以應該會出現錯誤
不過這隻程式實際上印出了 father 字樣
所以究竟是
1.private的member 也有繼承一份到child身上
只是外部直接使用會看不到
2.getMember並沒有繼承一份到child身上,呼叫c.getMember時
用的還是father身上的那一份
或者是其他更複雜的過程呢?
先謝謝各位版友的教導
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.241.215.203 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/java/M.1596604862.A.A72.html
→
08/05 13:50,
4年前
, 1F
08/05 13:50, 1F
→
08/05 13:59,
4年前
, 2F
08/05 13:59, 2F
→
08/05 14:00,
4年前
, 3F
08/05 14:00, 3F
→
08/05 14:02,
4年前
, 4F
08/05 14:02, 4F
所以你的意思是 1.的結論是對的
以下是我自己新增的測試
我把child改為
class child extends father{
String member = "child";
}
也就是讓它有自己一個專屬的member
結果原程式印出的字樣還是father
緊接著
我又在child裡自己override了getMember()
class child extends father{
String member = "child";
public String getMember(){
return member;
}
}
結果原程式印出child
在我override之前,如果child有繼承了一份getMember()在自己身上
為什麼它看到的scope會是在father身上呢?
而要等我自己override之後
scope才變成在child身上
抱歉,這邊好像越來越多觀念我沒辦法自圓其說了=.=
→
08/05 15:02,
4年前
, 5F
08/05 15:02, 5F
因為我原本的觀念是以為
繼承就是複製了一份程式碼在自己身上
如果是如此的話,在我override之前
繼承下來的getMember(),它看到的scope應該也是在child自己身上
但是現在看起來,在我override之前
就算繼承了father的getMember()
它看到的scope也是在father身上
所以繼承 就跟我想的 "複製一份程式碼在自己身上" 不太一樣
反而比較像是 "程式碼一樣在別人身上,我只是去參考它"
override之後,才是自己的
就變成好像是上面的 結論2. 才是對的
→
08/05 15:06,
4年前
, 6F
08/05 15:06, 6F
→
08/05 15:08,
4年前
, 7F
08/05 15:08, 7F
→
08/05 15:09,
4年前
, 8F
08/05 15:09, 8F
→
08/05 15:09,
4年前
, 9F
08/05 15:09, 9F
→
08/05 15:16,
4年前
, 10F
08/05 15:16, 10F
所以你的意思是 一樣是結論1.是正確的
只是複製下來的程式碼是Father.this.member
所以在我override之前,一樣會去找father的東西
跟scope無關就是了?
→
08/05 15:18,
4年前
, 11F
08/05 15:18, 11F
→
08/05 15:18,
4年前
, 12F
08/05 15:18, 12F
我了解了,謝謝你,你的回答幫助很大^^
※ 編輯: awpadam (111.241.215.203 臺灣), 08/05/2020 15:22:22
→
08/05 15:24,
4年前
, 13F
08/05 15:24, 13F
推
08/13 22:25,
4年前
, 14F
08/13 22:25, 14F
→
08/13 22:37,
4年前
, 15F
08/13 22:37, 15F
→
08/13 22:40,
4年前
, 16F
08/13 22:40, 16F
java 近期熱門文章
PTT數位生活區 即時熱門文章