Конечный пользователь может не иметь доступа к вашему коду, но кто-то в вашей команде может получить к нему доступ, и он может изменить его.
Другим преимуществом инкапсуляции является то, что она позволяет одному классу («серверу») заключать контракт с другим классом («клиентом») для предоставления некоторого сервиса, при этом требуется лишь очень немного информации о «сервере». msgstr "класс, такой как сигнатура метода и тип возвращаемого значения. Выгода реализуется только в том случае, если договор о том, что требуется и что возвращается, остается прежним. Таким образом, в вашем примере, вы не получите никакой выгоды, поскольку контракт был нарушен классом А.
Вместо того, чтобы класс A изменил тип int на float, класс A должен создать еще одну новую переменную типа float для использования другими классами, чтобы класс B не был "нарушен" или чтобы контракт не разрывался между ними. Класс C может ссылаться на новую переменную с плавающей точкой, а класс B может ссылаться на старую переменную int, и все довольны. Более того, методы будут использоваться для получения значений, таких как: «getUsersAddress» и «getUSersPhoneNumber» в зависимости от того, что требуется.
Реальное преимущество хорошей инкапсуляции состоит в том, что класс A может быть полностью переписан сверху вниз и при условии соблюдения контракта относительно того, что ожидается от класса A (есть методы "getUsersAddress" и "getUSersPhoneNumber" ), то все в классах B и C работает одинаково. Тщательно продумайте, что подвергается воздействию и как оно подвергается. Вещи, которые будут часто меняться и нарушать другие классы, должны быть тщательно рассмотрены, прежде чем разоблачать. Хорошая инкапсуляция означает скрытие вещей, которые, как ожидается, часто меняются, чтобы не нарушать другие классы.