Š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 Nested
klasei 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