Jason. Cała informatyka w jednym miejscu!

O klasach w Kotlinie po raz trzeci z rzędu! Poruszę teraz temat o tym, czym jest klasa zagnieżdżona w języku Kotlin. To będzie bardzo krótki wątek do omówienia więc zapraszam na poświęcenie czasu.

KLASA ZAGNIEŻDŻONA W JĘZYKU KOTLIN, CZYLI KLASA W KLASIE (DOSŁOWNIE)!

Pętle jeszcze zrozumiałe. Ale klasa w klasie? A czemu nie? Kotlin (tak jak Java) umożliwia "wpakowywanie" także klasy jednej do drugiej, czyli tworzenie klasy zagnieżdżonej. Sama w sobie nie przynosi niczego spektakularnego, bo to jedynie może poszerzyć wachlarz możliwości klasy zewnętrznej. Na przykład klasą zewnętrzną może być kontener albo zbiór paczek, a klasa zagnieżdżona byłaby taką jedną paczką z właściwościami i metodami.

Wyjątkowo, klasa zagnieżdżona nie jest tworzona za pomocą żadnego słowa kluczowego. Oczekuje jedynie odpowiedniego miejsca jej wstawienia, czyli wewnątrz innej już istniejącej klasy.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Przygotowałem prościutki przykład, bo klasa zagnieżdżona w języku Kotlin przynosi ze sobą trochę małych pułapek składniowych, o czym więcej piszę pod następnym nagłówkiem. Popatrzcie proszę:

class BoxesStorage {
	class Box(val identifier: String, val content: String) {
		fun writeContent() {
			println("Skrzynka o identyfikatorze $identifier, zawiera w sobie $content")
		}
	}
}

Jedna klasa w drugiej. Po prostu. A tak wygląda przykładowe wywołanie metody siedzącej w klasie zagnieżdżonej:

val box = BoxesStorage.Box("#457", "prezent")

box.writeContent()

Teraz parę komentarzy na temat zasad.

BĄDŹ TEGO ŚWIADOMY!

Musicie wiedzieć, że istnienie klasy zagnieżdżonej sprawia, że jest ona statyczna (jest ona równoważna statycznej klasie zagnieżdżonej w języku Java). Zatem, nie tworzymy instancji klasy zewnętrznej celem dostania się do zagnieżdżonej!

BoxesStorage().Box("#457", "prezent")	// błąd kompilacji

Jeszcze jedno. Klasa zagnieżdżona w języku Kotlin nie posiada dostępu do klasy zewnętrznej, czyli nie ma prawa do skorzystania z jej właściwości ani metod. Ale klasa wewnętrzna, tak.

Klasa zagnieżdżona w języku Kotlin

Klasa zagnieżdżona charakteryzuje się jedynie występowaniem wewnątrz innej klasy. Nie wymaga żadnego dodatkowego słowa kluczowego.


Koniec tematu. Sama klasa zagnieżdżona nie przynosi dużo zalet, niemniej jednak jeśli ktoś ma ochotę poszerzyć możliwości klasy zewnętrznej oraz nie zwraca uwagi na niedostępność do jej właściwości i metod, a miejsce do dziedziczenia od innej klasy jest już zajęte, można jak najbardziej skorzystać.

PODOBNE ARTYKUŁY