内部类

成员内部类

1、定义:在类的内部定义的一个类;

2、使用:

    2.1、内部类可以直接使用外部类的的成员(属性及方法)

        外部类名.this.成员(方法及属性)

        直接使用

    2.2、外部类调用内部类的成员,必须先创建对象

    2.3、其他的类访问内部类的成员,必须先创建内部类的对象

        外部类.内部类  对象名 = new 外部类().new 内部类();

3、内部类的权限

    1、内部类的权限和成员方法一样,private,默认,protected,public

    2、外部类只能使用public 和默认

    3、private效果等同于私有化方法,别的类无法进行调用,但是外部类可以直接调用,可以通过方法return回去。

    4、我们可以把内部类当做一个类中的方法来看待

    5、内部类同时具有方法和类的所有权益

4、内部类的作用:当一个类中的成员过多的时候,再次对类中的成员进行分组

静态内部类

1、定义

使用static关键字来修饰内部类

2、使用

    2.1调用静态内部类中的非静态方法

            new 外部类.内部类();

    2.2、调用静态内部类中的静态方法

            new 外部类.内部类.方法();

    2.3、静态内部类调用外部的非静态方法

            必须先创建外部类的对象然后才能进行调用

3、注意事项

    3.1、只要内部类中存在静态方法那么内部类必须是静态的

    3.2、内部类是静态的并不意味着内部类中的所有方法都是静态的

局部内部类

1、定义:

        定义在类中方法中的内部类叫做局部内部类

2、使用

    2.1、局部内部类的作用范围仅限于本方法中

    2.2、局部内部类在访问他所在的方法中的局部变量必须用final关键字进行修饰

            2.2.1、因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用

            2.2.2、jdk 1.8 取消的这个定义 , 其实不是取消了, 是设置为了隐式的

匿名内部类

1、定义

    就是内部类的简写形式,用于定义接口或者类的子类

2、使用

    2.1、前提是必须存在一个类,或者接口

    2.2、这里的类可以是具体的类,也可以是抽象的类

    2.3、相当于一个子类继承或者实现一个类或接口,然后重写里面的方法,本质是一个继承或者实现了该接口的匿名子类对象

    2.4、多用于规则简单,子类使用很少的接口应用中

3、格式

    new 类名或者接口名(){

        重写的方法;

     }

总结:

成员内部类

    对类中的成员再次分组

    分组完成之后,内部类中的成员没有办法直接调用了, 必须先创建外部类对象

    外部类对象.内部类对象

    内外部类成员之间相互调用的问题?

    内部类成员可以直接使用外部类的成员 , 外部类成员不能直接使用内部类的成员, 如果要使用,必须先创建对象

    如果内部类中出现了和外部类相同的名称的成员, 内部类必须要调用外部类的同名成员, 外部类名.this.成员

静态内部类

    成员内部类的写法造成了内部类的静态成员无法使用

    将内部类也变成静态的

    其他的成员之间的调用遵循的是 静态的特性

局部内部类

    当一个类只在当前方法内使用的时候

    局部内部类使用局部变量的时候, 变量要加上final关键

    1.8 版本之后,  编译器如果发现局部内部类中使用到了局部变量,会自动添加final关键字, 否则不添加, 为了提高内存利用率和简化书写

匿名内部类

    当一个类只使用一次的时候(省的起名字了)

    局部内部类有的特性 匿名内部类都有

    简写的一定有局限性

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。