Kotlina ligzdotā un iekšējā klase

Šajā rakstā jūs mācīsities strādāt ar ligzdotām un iekšējām klasēm, izmantojot piemērus.

Kotlina ligzdotā klase

Līdzīgi kā Java, Kotlin ļauj noteikt klasi citā klasē, kas pazīstama kā ligzdota klase.

 klase Ārējā (… klase ligzdota (…))

Tā kā Nested klase ir tās pievienojošās klases Outer dalībniece, varat izmantot .apzīmējumus, lai piekļūtu Nestedklasei un tās dalībniekiem.

Piemērs: Kotlina ligzdotā klase

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

Palaidot programmu, izeja būs:

Iekšpusē Nested klases. Funkcijas izsaukums no ligzdotas klases iekšpuses.

Java lietotājiem

Ligzdotā klase Kotlīnā ir līdzīga statiskai ligzdotajai klasei Java.

Ja Java deklarē klasi citas klases iekšienē, tā pēc noklusējuma kļūst par iekšējo klasi. Tomēr Kotlinā jums jāizmanto iekšējais modifikators, lai izveidotu iekšējo klasi, kuru mēs apspriedīsim tālāk.

Kotlina iekšējā klase

Ligzdotajām klasēm Kotlinā nav piekļuves ārējās klases instancei. Piemēram,

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

Iepriekš minētais kods netiks apkopots, jo mēs mēģinājām piekļūt ārējās klases īpašumam no ligzdotās klases iekšpuses.

Lai atrisinātu šo problēmu, jums ir jāatzīmē ligzdotā klase ar iekšējo, lai izveidotu iekšējo klasi. Iekšējās klasēs ir norāde uz ārējo klasi, un tās var piekļūt ārējās klases locekļiem.

Piemērs: Kotlina iekšējā klase

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

Palaidot programmu, izeja būs:

Ārējā objekta izmantošana: Ārpus Nested klases. Iekšējā objekta izmantošana: Ārpus Nested klases.

Ieteicamā literatūra: Anonīma iekšējā klase

Interesanti raksti...