Dlaczego zaleca się deklarowanie zmiennych instancji jako prywatnych?

Moje pytanie dotyczy języka Java, ale można je również zastosować do języka C #. Zastanawiałem się, dlaczego wszyscy zalecają tworzenie zmiennych instancjiprywatny w przeciwieństwie do ich tworzeniachroniony.

Pomyślmy o tym. Zmienne prywatne nie są widoczne przez podklasę, więc jeśli muszę uzyskać dostęp lub zmienić zmienne superklasy w mojej podklasie, zmuszony jestem do korzystania z niektórych metod dostępu i mutatorów, takich jakgetMyPrivateVariable lubsetMyPrivateVariable. Ale gdy rozszerzysz jakąś klasę i odziedziczysz jej członków, działa to tak, jakbyś zadeklarował je bezpośrednio w podklasie. Logicznie oznacza to, że podklasa powinna mieć również bezpośredni dostęp do zmiennych instancji i umożliwia zaprojektowanie klasy z chronionymi zmiennymi. Rozumiem, że taka praktyka przerwałaby kapsułkowanie, ale w przypadku dziedziczenia wydaje się to nieistotne, ponieważ w tym przypadku wszystko działa tak, jakby członkowie superklasy zostali zadeklarowani w sublcassie, więc sublcass ma „naturalne prawo” za możliwość bezpośredniego dostępu do swoich członków, bez względu na to, czy byli dziedziczeni, czy nie. Kapsułkowanie, moim zdaniem, jest ważniejsze dla połączenia z obiektem przez inne obiekty, które znajdują się poza drzewem dziedziczenia obiektu.

Moje pytanie brzmi: dlaczego wszyscy zalecają deklarowanie zmiennych instancji klasy jako prywatnych, a nie chronionych?

questionAnswers(6)

yourAnswerToTheQuestion