内部类

四种内部类的使用

内部类有四种

  1. 成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类

成员内部类

成员内部类是定义在类中的一个特殊的类,属于类的一个成员变量,包含内部类的类叫做外部类

class Outer{              //外部类
    class Inner{}         //成员内部类
}

成员内部类的访问控制修饰符可以是private,public,无,protected

成员内部类不能用static修饰,那样就变成了静态内部类

成员内部类中的变量和方法都不能是静态的,因为成员内部类不是静态的,其中有静态的属性和方法就意味着不需要新建对象就可以使用,但是如果直接使用,不新建外部类的对象的话,是没有办法使用的,因为成员内部类作为一个非静态变量,是不会在类加载的时候初始化的,而是在创建对象的时候初始化,直接使用是没办法使用的

同样的,成员内部类当中是没有psvm方法的。

成员内部类可以继承其他的类,包括外部类,这样就可以实现多继承

成员内部类可以访问外部类的所有属性和方法

编译之后会生成多个class文件

访问成员内部类

//Inner1 a = new Inner1();                //错误
//Outer.Inner1 a = new Outer.Inner1();    //错误
//Outer.Inner1 a = new Outer.Inner1();    //错误
Outer out = new Outer();
Outer.Inner1 a = out.new Inner1();
Inner1 b = out.new Inner1();

 一定要先创建外部类对象才能创建成员内部类

静态内部类

静态内部类就是静态的成员变量,但是有几点不同

静态内部类用static修饰

静态内部类的访问修饰符有protected、private、public、无

静态内部类可以继承其它类,包括外部类

静态内部类在类加载的时候就加载如内存,所以可以有静态属性和静态方法

静态内部类可以访问外部类的静态属性和方法

创建静态内部类

Outer.Inner inner = new Outer.Inner();

局部内部类

局部内部类是定义在方法内部的类

局部内部类不能有public、protected、private访问修饰符

局部内部类可以继承其他类,包括外部类

局部内部类不能有静态属性和静态方法

局部内部类可以使用方法的局部变量,但是一定要是final修饰的,也就是常量,因为如果是变量,那么方法出栈之后变量就会回收,这时候可能局部内部类还处于存活的状态(比如开了一个线程?),那么局部内部类就找不到这个变量了,所以需要是常量

局部内部类一般不需要直接使用,而是在方法内部就封装好了用途,只需要调用该方法

匿名内部类

匿名内部类就是没有名字的局部内部类

匿名内部类没有class、extends、implements

匿名内部类一般隐式的继承一个类

abstract class Outer{}

class Main{
    public static void test(Outer){}

    public static void main(String[] args){
        test(new Outer{
                int a;
             });
    }

直接用一个new建立一个Outer对象,传递给test方法。java会自动创建一个匿名内部类,并且转型为Outer类。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值