标签:函数 自己 初始化 需要 不能 调用 匿名 构造 new
为什么要使用内部类?
1、内部类方法可以访问定义它所在的作用域中的数据,包括私有的数据。
2、可以对同一个包中的其他类隐藏起来
3、想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
静态内部类与非静态内部类
静态内部类用static修饰,类与一个独立的类差别不大,除了位置放在外部类里面。与其他内部类相比,静态内部类与外部类联系也不大,只能访问外部类的静态变量和方法,但不能访问实例变量和方法。在类内部可以直接使用静态内部类,在外部,类似静态变量与静态方法,可以通过“外部类.静态内部类”使用,不生成外部类实例。
静态内部类的实现(内部类如何访问外部类的静态私有变量):每个内部类最后都会编译为一个独立的类,Java为外部类自动生成一个非私有的方法访问私有变量并返回。
非静态内部类没有static修饰,与静态内部类不同,它的实例总是与一个外部类实例相连的,因此需要先创建外部类实例,再创建内部类实例。除了静态变量和方法,非静态内部类可以直接访问外部类的实例变量和方法。但它自己不能定义静态变量和方法。可以理解为,内部类是与外部类实例相连的,而静态变量和方法是类的属性和方法,一般是独立使用的,在内部类中意义不大。如果真的需要静态变量和方法,就挪到外部类去吧。
非静态内部类的实现(内部类如何访问外部类的私有变量和方法):内部类有一个实例变量指向外部类对象,它在构造方法中被初始化,即指向已经生成的外部类对象。同时外部类生成了两个非私有静态方法,一个访问静态变量,一个访问静态方法。
方法内部类
顾名思义方法内部类就是在方法内部定义的类,只能在定义的方法内部使用,它对外部类的访问权限与所在的方法相同,即若方法是实例方法(非static),则可以访问外部类的实例变量和方法;若是静态方法,则只能访问外部类的静态变量和方法。方法内部类还可以直接访问方法的参数和方法中的局部变量,但局部变量和参数必须声明为final
匿名内部类
匿名内部类在创建对象的同时定义类。只能被使用一次,用来创建一个对象,它没有名字,没有构造方法,但可以调用对应的父类构造方法,也可以访问外部类的所有变量和方法。
public void sortIgnoreCase(String[] strs){
Arrays.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});
}
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
标签:函数 自己 初始化 需要 不能 调用 匿名 构造 new
原文地址:https://www.cnblogs.com/licheee/p/11969834.html