2015-11-26 110 views
1

這是一個初學者的問題,但我搜索了一下,似乎無法找到答案。Java子類如何繼承受訪問保護的父字段?

說我有一類人:

class Person { 
    private String SSN; 
    //blah blah blah... 
} 

,然後我創建一個子類奧德曼:

class OldMan inherits Person { 
    //codey stuff here... 
    public void setSSN(String newSSN) { 
    SSN = newSSN; 
    } 
} 

它看起來像我不能真正改變從人的私人領域。我的印象是,當OldMan繼承Person時,它將擁有它自己的私有變量副本。看起來實際上發生的事情是,當我創建一個OldMan對象時,它創建了SSN字段,但是......它以某種方式屬於一個Person對象?

我意識到我可以讓SSN受到保護,但這是一種最佳做法嗎?實際上在這裏發生了什麼,以及如何創建一個父類,該父類可以訪問受保護的重要字段,而不保護它們免受子類的影響?

+0

回答由此super.setSSN(..)更新,現在看起來很完美。感謝您的接受。 –

回答

2

你可以做這樣的事情,

class Person { 
     private String SSN; 
     //blah blah blah... 

    public String getSSN() { 
     return SSN; 
    } 

    public void setSSN(String sSN) { 
     SSN = sSN; 
    } 


    } 

public class OldMan extends Person { 
    //codey stuff here... 
     public void setSSN(String newSSN) { 
     super.setSSN(newSSN); 
     } 
} 
0

好像有什麼實際發生的是,當我創建一個奧德曼對象,而是創建SSN字段,但是......它在某種程度上屬於一個Person對象??

是的。究竟。

我意識到我可以讓SSN受到保護,但那是最佳做法嗎?

沒錯。這就是保護的作用,你可以安全地使用它。

這裏究竟發生了什麼,以及如何創建一個父類,它將重要字段的訪問權限保護起來,而不保護它們不受子類的影響?

就像你剛纔所說的那樣,讓他們保護,現在他們只能通過孩子的包裝和包裝來進入。