У овом чланку ћете научити да радите са угнежђеним и унутрашњим класама уз помоћ примера.
Котлин угнежђена класа
Слично као Јава, Котлин вам омогућава да дефинишете класу у другој класи познатој као угнежђена класа.
класа Спољашња (… класа угнежђена (…))
Будући да је угњежђена класа члан њене затворене класе Оутер, можете користити .
нотацију да бисте приступили Nested
класи и њеним члановима.
Пример: Котлинова угнежђена класа
class Outer ( val a = "Outside Nested class." class Nested ( val b = "Inside Nested class." fun callMe() = "Function call from inside Nested class." ) ) fun main(args: Array) ( // accessing member of Nested class println(Outer.Nested().b) // creating object of Nested class val nested = Outer.Nested() println(nested.callMe()) )
Када покренете програм, излаз ће бити:
Унутар гнеждене класе. Позив функције из угнежђене класе.
За кориснике Јава
Угнеждена класа у Котлину слична је статичкој угнежђеној класи у Јави.
У Јави, када декларишете класу у другој класи, она подразумевано постаје унутрашња класа. Међутим, у Котлину морате да користите унутрашњи модификатор да бисте креирали унутрашњу класу о којој ћемо даље разговарати.
Котлин Иннер Цласс
Угњежђене класе у Котлину немају приступ спољној инстанци класе. На пример,
class Outer ( val foo = "Outside Nested class." class Nested ( // Error! cannot access member of outer class. fun callMe() = foo ) ) fun main(args: Array) ( val outer = Outer() println(outer.Nested().callMe()) )
Горњи код се неће компајлирати јер смо покушали да приступимо фоо својству Оутер класе из класе Нестед.
Да бисте решили овај проблем, потребно је да угнежђену класу означите унутрашњом да бисте креирали унутрашњу класу. Унутрашње класе носе референцу на спољну класу и могу приступити члановима спољне класе.
Пример: Котлин Иннер Цласс
class Outer ( val a = "Outside Nested class." inner class Inner ( fun callMe() = a ) ) fun main(args: Array) ( val outer = Outer() println("Using outer object: $(outer.Inner().callMe())") val inner = Outer().Inner() println("Using inner object: $(inner.callMe())") )
Када покренете програм, излаз ће бити:
Коришћење спољног објекта: Изван угнежђене класе. Коришћење унутрашњег објекта: Изван угнежђене класе.
Препоручена литература: Анонимна унутрашња класа