Niektóre języki i środowiska wykonawcze (np. Java, .NET) przyjmują założenie, że każdemu, kto kompiluje kod dla określonej klasy, można ufać, że nie użyje żadnych prywatnych członków żadnej instancji tej klasy w sposób, który byłby szkodliwy dla jego poprawności operacja. Inne języki i frameworki są pod tym względem bardziej restrykcyjne i nie pozwalają na dostęp do prywatnych członków instancji, z wyjątkiem kodu działającego w tej instancji . Oba projekty mają zalety i wady.
Największą zaletą zezwalania każdemu kodowi w klasie na dostęp do prywatnych członków dowolnej instancji jest to, że istnieją przypadki, w których ten poziom dostępu jest odpowiedni, a privatepraca w ten sposób eliminuje potrzebę posiadania innego kwalifikatora dostępu do tego celu lub inaczej zmusi kod do ujawnienia członków w szerszym zakresie niż byłoby to idealne.
Zaletą uniemożliwienia takiego dostępu (jak miało to miejsce w przypadku modelu Microsoft Common Object Model (COM)) jest to, że pozwala on kodowi zewnętrznemu traktować klasy jako interfejsy. Jeśli grupa ImmutableMatrixzawiera prywatne lub chronione double[][]pole oporowe i jeśli kod w klasie bada tablicę podkładową innych przypadkach, to nie jest możliwe określenie klasy nie tablicy oparciem (na przykład ZeroMatrix, IdentityMatrix), który może wykorzystać kod zewnętrzny w i Immutable2dMatrixbez konieczności uwzględnienia przez tę klasę pola zaplecza. Jeśli nic wewnątrz nie Immutable2dMatrixkorzysta z prywatnych członków żadnej instancji innej niż this, wówczas można by zmienić nazwę klasy na ImmutableArrayBackedMatrixi zdefiniować nową ImmutableMatrixklasę abstrakcyjną, która mogłaby mieć, ImmutableArrayBackedMatrixpodobnie jak wyżej wymienione klasy nieobsługiwane przez tablice, jako podtypy.
Zauważ, że takiemu refaktoryzacji nie można zapobiec, jeśli język „zezwoli” ImmutableMatrixna sprawdzenie tablicy thispomocniczej dla instancji innych niż , chyba że język skorzystałby z tej możliwości i faktycznie zbadał instancje zewnętrzne. Podstawowym efektem ograniczenia użycia takiego języka jest to, że kompilator natychmiast skrzęczy przy każdej próbie napisania kodu, który nie byłby podatny na takie refaktoryzowanie.
equalsże trzeba sprawdzić prywatne pola innej instancji. (Publikowanie jako komentarz, ponieważ jest krótki, i nic o OOP-ności tego podejścia)