Как дочерний класс 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 защищенным, но разве это лучше?

Именно так. Вот как работает защищенный, и вы можете безопасно использовать его.

Что на самом деле здесь происходит, и как можно создать родительский класс, который будет защищать доступ к важным полям, не защищая их от дочерних классов?

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

Другие вопросы по тегам