您的当前位置:首页正文

死磕java-java内部类

来源:要发发知识网

定义:

定义在一个类内部的类,其中的方法可以访问外部类的域

使用原因:

1、内部类可以访问该类定义的所在作用域的数据,包括私有数据2、内部类可以对同一个包中的其他类隐藏3、当想要定义一个回调函数且不想写大量的代码时,使用匿名内部类比较便捷

分类:

成员内部类

定义:在外部类的内部,而且与成员方法和属性平级的类

  (1)成员内部类不能存在static关键字,即不能声明静态属性、静态方法、静态代码块

  (2)成员内部类的实例化 外部类.内部类 变量名=外部类的实例.new 内部类()

  (3)内部类使用外部类的方法和属性 外部类.this.方法/属性

  (4)外部类无法访问内部类的方法和属性,需要实例化一个内部类对象才能访问

(5)单独的class文件,外部类$内部类.class

静态内部类

定义:使用static修饰的内部类叫作静态内部类,在内部类不需要使用外部类的时候可以使用静态内部类

  (1)静态内部类可以定义静态成员(静态变量、静态方法)和实例成员

  (2)静态内部类只能访问外部类的静态成员 外部类.静态成员

  (3)外部类的作用域外使用内部类 外部类.内部类 变量名=new 外部类.内部类()

  (4) 单独的class文件,外部类$内部类.class

局部内部类

定义:在代码块、方法内、作用域(使用花括号“{}”括起来的一段代码)内的类叫局部内部类。

  (1)局部内部类只能在代码代码块、方法体内和作用域中使用(如创建对象和使用类对象等)

  (2)局部内部类访问作用域内的局部变量,该局部变量需要使用final修饰。

  (3)可以使用abstract修饰,声明为抽象类。

匿名内部类

定义:局部内部类升级,只创建一个局部内部类的实例,且不用命名就是匿名内部类

匿名内部类定义和实例化形式如下:

new 父类/接口构造方法(参数){

    //注:该方法名必须在父类/接口中已经存在

    修饰符 返回参数类型 方法名(参数列表){

          。。。

    }

}

注意这是一个实例

(1)单独的class文件,使用类$数字.class