内部类使用方法
2016-06-07 19:14
190 查看
Java内部类是定义在一个类中的类,内部类有一下几点作用:
内部类有所在作用域数据的访问权限,包括private数据。
内部类对同一个包是隐藏的。
使用方便,不需要大量的定义。
注意:外部类访问内部类,必须创建对象。
根据内部类的位置可以分为两种:
成员内部类:定义在类成员位置
成员内部类一般用private修饰,防止外界访问。
静态成员内部类:使用static修饰(一般为public static),定义的方法无法访问外部类的非静态成员,并且
实例化方式也会发生改变。
局部内部类:定义在局部位置(方法里面)
1.可以直接访问外部类成员。
2.可以在方法中创建局部内部类对象,并调用其方法。
3.内部类中方法局部变量,必须为final修饰,因为方法调用完后变量回收,对象却可以还存在
匿名内部类
内部类的简化写法,前提是存在一个类或接口。
本质是创建了一个继承了类或实现了接口的子类匿名对象。
格式:
内部类有所在作用域数据的访问权限,包括private数据。
内部类对同一个包是隐藏的。
使用方便,不需要大量的定义。
注意:外部类访问内部类,必须创建对象。
根据内部类的位置可以分为两种:
成员内部类:定义在类成员位置
class Outer { private int num = 10; class Inner { public int num = 20; public void show(){ int num = 30; //访问局部变量 System.out.println(num); //访问内部类变量 System.out.println(this.num); //访问外部类变量 System.out.println(Outer.this.num); System.out.println(new Outer().num); } } } public class Train{ public static void main(String[] args) { //1.直接构造inner,外部类匿名无法使用 Outer.Inner inner1 = new Outer().new Inner(); //2.通过外部类创建内部类 Outer outer = new Outer(); Inner inner2 = outer.new Inner(); inner1.show(); inner2.show(); } }
成员内部类一般用private修饰,防止外界访问。
静态成员内部类:使用static修饰(一般为public static),定义的方法无法访问外部类的非静态成员,并且
实例化方式也会发生改变。
Outer.Inner inner = new Outer.new Inner(); Outer.Inner.xxx(); //新增的方法调用方式
局部内部类:定义在局部位置(方法里面)
1.可以直接访问外部类成员。
2.可以在方法中创建局部内部类对象,并调用其方法。
3.内部类中方法局部变量,必须为final修饰,因为方法调用完后变量回收,对象却可以还存在
class Outer { private int num = 10; public void method(){ final int num2 = 20; //final修饰 class Inner{ public void show(){ System.out.println(num); System.out.println(num2); } } Inner inner = new Inner(); inner.show(); } }
匿名内部类
内部类的简化写法,前提是存在一个类或接口。
本质是创建了一个继承了类或实现了接口的子类匿名对象。
格式:
interface Inner{ public abstract void show(); } class Outer { public void method(){ //匿名直接使用 new Inner(){ public void show() { System.out.println("hello"); } }.show(); //多次使用 Inner inner = new Inner(){ public void show() { System.out.println("hello"); } }; inner.show(); } }
相关文章推荐
- STL容器的使用
- [译]好程序员的五声“呐喊”
- 安卓滑动冲突的理解和一些解决思路
- listview中EditText,焦点问题
- 第15周阅读程序(2)
- ipairs和pairs区别
- 数据库简介
- jquery 变量和原生js变量的关系
- LLVM 和Clang源代码编译
- 飛飛(五十八)虚析构函数
- Android Studio导入Vitamio多媒体开发框架 1
- Light OJ - 1008 - Fibsieve`s Fantabulous Birthday
- 权限的设计
- 第15周阅读程序(1)
- 实习面试小记-腾讯、阿里、大摩、网易
- C++符号的还原(demangling)
- 如何禁止listview的item项获得焦点,而让子控件获得焦点
- House Robber
- SQL Server地理位置信息计算两点经纬度距离
- (飛飛五十七)虚函数