2014-11-12 6 views
0

Я прочитал почти из всех источников, что частные члены не наследуются. Затем как getters и seters этих частных полей могут получить доступ к закрытым полям в subClass?Частные члены не наследуются. то как геттеры и сеттеры могут получить доступ к закрытым полям в субклассе?

вот мой код, который работает нормально.

class First{ 
private String first; 
public String getFirst() { 
    return first; 
} 

public void setFirst(String first) { 
    this.first = first; 
} 
} 


public class PrivateFieldTestingUsingGettersAndSetters extends First{ 
private String second; 
public String getSecond() { 
    return second; 
} 
public void setSecond(String second) { 
    this.second = second; 
} 

public static void main(String[] args){ 
    PrivateFieldTestingUsingGettersAndSetters ob1=new PrivateFieldTestingUsingGettersAndSetters(); 
    ob1.setFirst("first"); 
    ob1.setSecond("second"); 
    System.out.println(ob1.getFirst()); 
    System.out.println(ob1.getSecond()); 
    } 
} 

Выход: первого второго

+1

Публичные геттеры и сеттеры - это окно в душу вашего класса. Они наследуются и имеют доступ к конфиденциальным данным. Это не прямой доступ, хотя вы можете либо a) не определять их, либо b) изменять способ доступа к этим значениям через них. – scrappedcola

+1

они доступны везде, причем не только из класса наследования. если не было способа вызвать методы, в которых инкапсуляция частных членов была бессмысленной – user2717954

ответ

4

При написании коды таким образом, ваш PrivateFieldTestingUsingGettersAndSetters является не доступа частных элементов данных своего First родителя.

Это является вызовом общественных методов родительского First, которые имеют доступ к его закрытым членам данных. Родительский класс всегда имеет доступ к своему состоянию.

Если вы меняете private на protected в First для членов класса, это означает, что классы, которые расширяются First, могут иметь полный доступ без геттеров или сеттеров. Классы, которые не наследуются от First, не имеют доступа к protected.

Если вы не предоставите сеттеры в First, и сделать First членов private final, это делает Firstнеизменны. (Это очень хорошо для безопасности потоков.)