一、内部类:
定义在类内部的类
与类成员有相似的访问控制
kotlin 默认是静态内部类,非静态用inner关键字
this@outter,this@inner的用法
二、匿名内部类
没有定义名字的内部类
类名编译时生产,类似Outter$1.class
三、看一下Java中的内部类
package net.println.kotlin.chapter4.innerClass;
/**
* @author:wangdong
* @description:Java中的内部类
*/
/**外部内*/
public class InnerClassJava {
private int a;
public class Inner{
public void hello(){
System.out.println(a);
System.out.println(InnerClassJava.this.a);
}
}
public static class StaticInner{
public void hello(){
}
}
public static void main(String[] args) {
InnerClassJava innerClassJava = new InnerClassJava();
Inner inner = innerClassJava.new Inner();
View view = new View();
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick() {
}
});
}
}
四、看一下Kotlin中的内部类
package net.println.kotlin.chapter4.innerClass
/**
* @author:wangdong
* @description:
*/
/**外部类*/
open class Outter{
val a: Int = 0
class StaticInner{
fun hello(){
}
}
inner class Inner{
fun hello(){
println(a)
println(this@Outter.a)
}
}
}
/**定义一个点击监听的接口*/
interface OnClickListener{
fun onClick()
}
/**定义一个View类*/
class View{
var onClickListener: OnClickListener ?= null
}
fun main(args: Array<String>) {
val staticInner = Outter.StaticInner()
val inner = Outter().Inner()
val view = View()
view.onClickListener = object: Outter(),OnClickListener{
override fun onClick() {
TODO("not implemented")
}
}
}