„Kotlin“ įdėta ir vidinė klasė

Šiame straipsnyje išmoksite pavyzdžių pagalba dirbti su įdėtomis ir vidinėmis klasėmis.

Kotlino įdėta klasė

Panašiai kaip „Java“, „Kotlin“ leidžia apibrėžti klasę kitoje klasėje, vadinamoje įdėta klase.

 klasė išorinė (… klasė įdėta (…))

Kadangi „Nested“ klasė yra jos uždaromos klasės „Outer“ narys, galite naudoti .žymėjimą norėdami pasiekti Nestedklasę ir jos narius.

Pavyzdys: Kotlino įdėta klasė

 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()) )

Kai paleisite programą, išvestis bus:

Viduje įdėta klasė. Funkcijos iškvietimas iš įdėtos klasės.

„Java“ vartotojams

Lizdinė klasė Kotline yra panaši į statinę įdėtą „Java“ klasę.

„Java“ sistemoje paskelbus klasę kitoje klasėje, ji pagal nutylėjimą tampa vidine klase. Tačiau Kotline turite naudoti vidinį modifikatorių, kad sukurtumėte vidinę klasę, kurią aptarsime toliau.

„Kotlin“ vidinė klasė

Įkeltos Kotlino klasės neturi prieigos prie išorinės klasės egzemplioriaus. Pavyzdžiui,

 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()) )

Aukščiau pateiktas kodas nebus kompiliuojamas, nes mes bandėme pasiekti išorinę klasės ypatybę iš „Nested“ klasės.

Norėdami išspręsti šią problemą, turite pažymėti įdėtą klasę vidine, kad sukurtumėte vidinę klasę. Vidinėse klasėse yra nuoroda į išorinę klasę ir jie gali prieiti prie išorinių klasės narių.

Pavyzdys: „Kotlin“ vidinė klasė

 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())") )

Kai paleisite programą, išvestis bus:

Išorinio objekto naudojimas: Outside Nested klasė. Vidinio objekto naudojimas: Išorinė įdėta klasė.

Rekomenduojama literatūra: anoniminė vidinė klasė

Įdomios straipsniai...