内部类

将一个类定义置入另一个类定义中就叫作“内部类”
特点:内部类作为外部类的成员,可以直接访问外部类的成员(包括private成员),反之则不行。
内部类做为外部类成员,可声明为private、默认、protected或public。
内部类成员只有在内部类的范围之内是有效的。
用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。
编译后生成两个类: OuterClass.class 和OuterClass$InnerClass.class

内部类分类:
成员内部类 静态内部类 方法内部类 匿名内部类
1.成员内部类
当内部类的成员和外部类的成员重名的时候,在内部类默认使用内部类的成员
如果在内部类想要使用外部类的重名成员,需要用 外部类名.this.成员名
外部类的成员方法可以直接使用内部类
其他类不能直接访问内部类,只能间接方法,创建外部类的对象,再创建内部类的对象,才能使用内部类
2.静态内部类
在内部类前加static 就是静态内部类、如果内部类中的属性或方法是static,则这个内部类必须是static
静态内部类只能使用外部类的静态成员,不能使用外部类的非静态成员,静态的内容都是属于类所有,可以通过类名直接调用。所以静态的内部类也是属于类所有,可以直接用外部类的类名来调用,来创建对象。
3.方法内部类
将内部类定义在外部类的方法中
方法内部类不能在外部类的方法以外的地方使用,方法内部类不能使用访问控制符和static修饰
方法内部类如果想使用方法的参数,那么参数前必须加final关键字
方法中的内部类 只能在方法内使用,出了方法就不能再使用方法中的内部类了,所以要想使用内部类 就必须在方法结束之前使用内部来创建一个对象 ,使用内部类的对象来调用内部类的方法。
4. 匿名内部类
没有名字的内部类
匿名内部类有个前提条件:必须存在继承和实现关系
适合只需要使用一次的类
当一个接口的实现类只需要使用一次,这时候可以直接用接口来new对象。接口不能直接创建对象,所以在new对象之前,先将接口实现成一个实现类,再用该实现类去创建对象

posted @ 2019-04-30 09:03  J-boya  阅读(95)  评论(0编辑  收藏  举报