Przegląd poziomów dostępu
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 10 z 87.
Modyfikatory dostępu określają, skąd można uzyskać dostęp do pól i metod. Java ma cztery poziomy kontroli dostępu.
| Modyfikator | Ta sama klasa | Ten sam pakiet | Podklasa | Wszędzie |
|---|---|---|---|---|
private | Tak | Nie | Nie | Nie |
| domyślny (brak słowa kluczowego) | Tak | Tak | Nie | Nie |
protected | Tak | Tak | Tak | Nie |
public | Tak | Tak | Tak | Tak |
public class BankAccount {
private double balance; // Tylko ta klasa
String accountType; // Domyślnie: tylko w tym samym pakiecie
protected String owner; // Ten sam pakiet + klasy pochodne
public String bankName; // Dostępne wszędzie
}private jest najbardziej restrykcyjne — używaj go w przypadku danych wewnętrznych, do których nigdy nie należy uzyskiwać bezpośredniego dostępu. public jest najbardziej otwarte — używaj go w przypadku metod, które muszą wywoływać inne klasy.
Jeśli nie określisz żadnego modyfikatora, Java używa dostępu domyślnego (nazywanego też dostępem na poziomie pakietu). Umożliwia on dostęp tylko w obrębie tego samego pakietu.
class Helper { // Klasa z domyślnym poziomem dostępu
void assist() { } // Metoda z domyślnym poziomem dostępu
}Wybierz najbardziej restrykcyjny poziom dostępu, który nadal pozwala działać Twojemu kodowi. Chroni to Twoje dane i ułatwia utrzymanie kodu.
Wyzwanie
ŁatwyZbudujmy system rekordów Student, który pokazuje, jak modyfikatory dostępu kontrolują widoczność w różnych plikach.
Utworzysz dwa pliki, aby uporządkować swój kod:
Student.java: Zdefiniuj klasę Student z polami o różnych poziomach dostępu:- pole
private:studentId(String) — dostępne tylko w klasie Student - pole domyślne (bez modyfikatora):
grade(int) — dostępne w obrębie tego samego pakietu - pole
protected:name(String) — dostępne w tym samym pakiecie i w podklasach - pole
public:school(String) — dostępne wszędzie
publico nazwiegetInfo(), która zwraca ciąg znaków w formacie:"[studentId] name - Grade grade at school"- pole
Main.java: Utwórz obiekt Student i pokaż, do których pól można uzyskać bezpośredni dostęp spoza klasy. Wypisz bezpośrednio poleschool, a następnie wypisz wynikgetInfo(), aby wyświetlić wszystkie informacje o uczniu.
Otrzymasz cztery dane wejściowe: studentId, name, grade i school (w tej kolejności).
Wynik powinien składać się z dwóch wierszy: nazwy szkoły uzyskanej bezpośrednio, a następnie pełnych informacji o uczniu zwróconych przez metodę getInfo().
Spróbuj swoich sił
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Odczytaj dane wejściowe
String studentId = scanner.nextLine();
String name = scanner.nextLine();
int grade = Integer.parseInt(scanner.nextLine());
String school = scanner.nextLine();
// TODO: Utwórz obiekt Student z podanych wartości
// TODO: Wyświetl bezpośrednio pole school (jest dostępne, ponieważ jest publiczne)
// TODO: Wyświetl wynik getInfo(), aby pokazać wszystkie informacje o uczniu
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online