Несмотря на то, что я прожил Java на протяжении 11 лет, я был в шоке, когда обнаружил этот факт два (!) Года назад.Должно быть, я читал это раньше, но почему-то это никогда не запало. Я согласен, что сначала это кажется странным, но когда вы думаете об этом немного дольше, это имеет смысл.
Что такое ОО?О разделении проблем и сокрытии информации, верно?Так что в своем дизайне вы всегда (должны) стараться избегать необходимости «знать» о вещах вне вашей собственной заботы, потому что это равносильно предположениям;вещи, которые вы «знаете» во время разработки, могут позже измениться и опровергнуть предположение, которое делает ваш класс.
В этом случае вы разрешаете Foo получить доступ к личному бару другого Foo, который сначала ощущается как «знание» о чем-то, что не касается Foo.Но поскольку мы говорим о двух экземплярах одного и того же класса (Foo), это на самом деле не наша забота!Например, если мы изменили значение bar с int на double, мы сделаем это в одном и том же классе, и любые ошибки компиляции будут обнаружены немедленно.
Кроме того, представьте, что этот тип доступа был запрещен.Так что, если Foo вызвал свой собственный CompareTo, передав «this» в качестве аргумента?Тогда мы должны запретить Foo доступ к его собственному приватному бару?А как насчет частных статических полей?Это было бы очень запутанно, вы не согласны?
Возможно, немного скучно, но я надеюсь, что вы сможете оценить, что после первого шока это действительно имеет смысл!(-: