Как дочерний класс Java наследует защищенные от доступа родительские поля?
Это вопрос для начинающих, но я погуглил и не могу найти ответ.
Скажем, у меня есть классный человек:
class Person {
private String SSN;
//blah blah blah...
}
а затем я создаю подкласс OldMan:
class OldMan inherits Person {
//codey stuff here...
public void setSSN(String newSSN) {
SSN = newSSN;
}
}
Похоже, я не могу на самом деле изменить частные поля от лица. У меня сложилось впечатление, что когда OldMan унаследует Person, он будет иметь свои собственные копии закрытых переменных, которые ему принадлежат. Кажется, что на самом деле происходит то, что когда я создаю объект OldMan, он создает поле SSN, но... он каким-то образом принадлежит объекту Person??
Я понимаю, что могу просто сделать SSN защищенным, но разве это лучше? Что на самом деле здесь происходит, и как можно создать родительский класс, который будет защищать доступ к важным полям, не защищая их от дочерних классов?
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);
}
}
Кажется, что на самом деле происходит то, что когда я создаю объект OldMan, он создает поле SSN, но... он каким-то образом принадлежит объекту Person??
Да. Именно так.
Я понимаю, что могу просто сделать SSN защищенным, но разве это лучше?
Именно так. Вот как работает защищенный, и вы можете безопасно использовать его.
Что на самом деле здесь происходит, и как можно создать родительский класс, который будет защищать доступ к важным полям, не защищая их от дочерних классов?
Как вы только что сказали, заставьте их защищать, теперь к ним могут получить доступ только дети и с собой в упаковке.