funmain(args: Array<String>){ val one = Lv1.Lv2().one val two = Lv1.Lv2.Lv3().getTwo() val three = Lv1.Lv2.Lv3.Lv4().three val four = Lv1.Lv2.Lv3.Lv4().getFour() println(one) //1 println(two) //2 println(three) //3 println(four) //4 }
classLv1{ classLv2{ privateval zero: Int = 0 val one: Int = 1 classLv3{ fungetTwo() = 2 classLv4{ val three = 3 fungetFour() = 4 } } } }
普通的嵌套类无法访问外部类的成员 加上inner关键字后即可访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
funmain(args: Array<String>){ val innerClass = Lv1.Lv2().Lv3().accessOuter() //能够成功运行,但是没有任何输出结果,但是按理说应该会输出0和1我尝试在控制台中输入同样的内容,也是没有任何输出结果,至少证明了确实inner类可以访问外部类的内容 }
classLv1{ classLv2{ privateval zero: Int = 0 val one: Int = 1 innerclassLv3{ funaccessOuter() = { println(zero) println(one) } } } }
funmain(args: Array<String>){ val subject = RealSubject("World") subject.hello() println("-------------------") val proxySubject = ProxySubject(subject) proxySubject.hello() }
interfaceSubject{ funhello() }
classRealSubject(val name: String):Subject{ overridefunhello(){ val now = Date() println("Hello,REAL $name! Now is $now") } }
classProxySubject(val sb: Subject):Subject by sb{ overridefunhello(){ print("Before ! Now is ${Date()}") sb.hello() print("After 1 Now is ${Date()}") } }
输出结果
1 2 3 4 5
Hello,REAL World! Now is Mon Dec 2514:47:48 UTC 2017 ------------------- Before ! Now is Mon Dec 2514:47:48 UTC 2017Hello,REAL World! Now is Mon Dec 2514:47:48 UTC 2017 After 1 Now is Mon Dec 2514:47:48 UTC 2017