Ściąga z modyfikatorów dostępuW prawie wszystkich językach obiektowych istnieją tak zwane specyfikatory dostępu, przykładem których jest choćby public czy private. Pozwalają one ustalać, jak szeroko dostępne są poszczególne składniki klas w stosunku do reszty kodu. Modyfikatory te występują m.in. w trzech najpopularniejszych, kompilowalnych językach obiektowych: C++, C# i Javie.
Problem polega na tym, że w każdym z nich działają one inaczej. Mało tego: każdy z tych języków posiada inny zbiór tego rodzaju modyfikatorów. Dla kogoś, komu zdarza się pisać regularnie w przynajmniej dwóch spośród nich, może to być przyczyną pomyłek i nieporozumień.
Dlatego też przygotowałem prostą ściągawkę w postaci tabelki, którą prezentuję poniżej. Symbol języka występujący w komórce oznacza tutaj, że dany modyfikator (z wiersza) powoduje widoczność składnika klasy w określonym miejscu (z kolumny).
| Specyfikator | Klasa | Podklasa | Pakiet | Reszta |
public |
C++ C# Java | C++ C# Java | C# Java | C++ C# Java |
protected |
C++ C# Java | C++ C# Java | Java | |
protected internal |
C# | C# | C# | |
internal |
C# Java | C# Java | ||
private |
C++ C# Java |
Parę uwag gwoli ścisłości:
public, jako że w tym języku w ogóle nie istnieje pojęcie pakietu.internal jest słowem specyficznym dla C#, a jego ekwiwalentem w Javie jest po prostu pominięcie modyfikatora w deklaracji (np. int x; zamiast internal int x;).protected internal jest modyfikatorem występującym wyłącznie w C#/.NET.