内部类可以分为两大类:1.局部内部类 2.匿名内部类(特别重要!!!!!!!!)内部类都定义在外部类的成员方法上,有成员内部类和静态内部类两种。
局部内部类是定义在外部类的局部位置比如在外部类定义的方法中,并且有类名。
1.它可以直接访问外部类的所有成员,包括私有的。
2.它不能用访问修饰符来修饰,因为它相当于一个局部变量,局部变量不能用访问修饰符来修饰,但是可以用final来修饰它。
3.它仅仅作用在代码块或者方法中。
4.局部内部类访问外部类的成员,直接访问即可。
5.外部类访问局部内部类的成员,先创建对象再访问。
局部内部类和匿名内部类的本质还是一个类。
外部其他类不能访问该类的局部内部类,因为它是一个局部变量。
如果外部类成员变量名和局部内部类成员变量名重名时按照就近原则访问变量,如果想访问外部类的变量,则可以使用(类名.this.变量名)
下面用几个实例的代码来解释一下这几个特征:
public class inclass {
public static void main(String[] args) {
Outer outer = new Outer();
outer.m2();
}
}
class Outer{
private int n1 = 100;
private void m1(){
System.out.println("m1方法");
}
public void m2(){
class Inner{
private int n1 = 80;
public void f1(){
System.out.println("n1 = " + n1 + "外部类的n1 =" + Outer.this.n1);
m1();
}
}
//6. 外部类在方法中,可以创建 Inner 对象,然后调用方法即可
Inner inner = new Inner();
inner.f1();
}
}
这段代码就能体现局部内部类的一些特征,后面还有静态内部类,成员内部类,还有匿名内部类(匿名内部类最主要)后面会单独写一篇关于匿名内部类的实例分析代码,源码中大部分都是匿名内部类的身影,想看懂源码匿名内部类必须学好。