Jason. Cała informatyka w jednym miejscu!

Dzisiejszym tematem artykułu jest słowo kluczowe "inner class" w języku Kotlin, które umożliwia tworzenie niejakich "klas wewnętrznych". Klikajcie szybko po szczegóły, aby poszerzyć swoją wiedzę z programowania w Kotlinie!

"INNER CLASS" W JĘZYKU KOTLIN CZYNI KLASĘ WEWNĘTRZNĄ!

Niniejszy artykuł stanowi pośrednio dalszy ciąg treści związanej z klasami zagnieżdżonymi w Kotlinie, gdyż tematy są ze sobą powiązane. Klasa wewnętrzna to także klasa osadzona wewnątrz innej klasy, ale posiadająca dostęp do właściwości i metod klasy zewnętrznej, co odróżnia ją od klasy zagnieżdżonej. Konsekwencją tego jest obowiązek utworzenia instancji klasy zewnętrznej, aby utworzyć instancję klasy wewnętrznej i ewentualnie przypisać sobie do zmiennej, co dowodzi temu że tutaj nie ma żadnej statyczności! Miszmasz powoduje, że tym bardziej potrzebny jest przykład obrazujący użycie!

PRZYKŁAD KODU ŹRÓDŁOWEGO

Scenariusz jest taki. Mamy fabrykę czekolady (to będzie klasa zewnętrzna). Dzięki jej funkcjonowaniu, możliwa jest produkcja czekolady (to będzie klasa wewnętrzna), czyli jedno nie może istnieć bez drugiego. Chcemy, żeby na podstawie właściwości klasy fabryki, która będzie oznaczać jej rodzaj (gorzka, mleczna itd.), móc utworzyć obiekt czekolady o podanym rodzaju jaki fabryka produkuje. "inner class" w języku Kotlin będzie jak znalazł! Spójrzmy wspólnie na to (dla upewnienia się, że doszło do faktycznego utworzenia obiektu, dodałem od siebie blok inicjalizatora):

class ChocolateFactory(val type: String) {
	inner class Chocolate {
		init {
			println("Wyprodukowano czekoladę typu \"$type\"")
		}
	}
}

Definicja jest PRAWIE taka sama. Dopisujecie tylko przedrostek "inner class" w języku Kotlin i już zamieniacie klasę zagnieżdżoną na wewnętrzną. Bardziej interesuje mnie, żebyście zwrócili baczniejszą uwagę na wykorzystywanie:

val cf = ChocolateFactory("mleczna")
val milkChocolate = cf.Chocolate()

Co się powinno rzucać w oczy? Konieczne skorzystanie z konstruktora klasy zewnętrznej celem przedostania się do konstruktora klasy wewnętrznej! To jest jedyna rzecz o której musicie pamiętać! Reszta jest taka sama.

Bonusowa informacja: jest możliwość wrzucenia danej składowej do klasy zewnętrznej, która będzie typu "klasa wewnętrzna"! Z racji tego, że klasa "inner class" w języku Kotlin należy do klasy zewnętrznej, nie ma żadnych wątpliwości co do dostępu:

class ChocolateFactory(val type: String) {
	val chocolate = Chocolate()	// instancja klasy wewnętrznej w środku klasy zewnętrznej

	inner class Chocolate {
		init {
			println("Wyprodukowano czekoladę typu \"$type\"")
		}
	}
}
Klasa wewnętrzna w języku Kotlin

Klasa wewnętrzna, w odróżnieniu od klasy zagnieżdżonej, posiada pełny dostęp do wszystkich właściwości i metod klasy zewnętrznej. Wymaga ona utworzenia instancji klasy zewnętrznej celem skorzystania z instancji klasy wewnętrznej, gdyż nie jest to klasa statyczna!

Dodam na zakończenie, że to nie jest nic innowacyjnego w języku Kotlin i to samo oferuje Java. I klasę zagnieżdżoną, i wewnętrzną, możecie zdefiniować także w Javie.


Zakończyliśmy wspólnie następny temat dotyczący Kotlina. Używając "inner class" w języku Kotlin, musimy pamiętać o koniecznym skorzystaniu z konstruktora klasy zewnętrznej celem dostania się do klasy wewnętrznej, gdyż NIE JEST to już klasa statyczna. Innej drogi nie ma!

PODOBNE ARTYKUŁY