内部类
内部类是指在一个外部类的内部再定义一个类。内部类的出现,再次打破了Java单继承的局限性。
内部类可以是静态 static 的,也可用 public,default,protected 和 private 修饰。(而外部顶级类即类名和文件名相同的只能使用 public 和 default)。
注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两个类。
对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现 outer.class 和outer$inner.class 两类。所以内部类的成员变量/方法名是可以和外部类的相同的。
1 成员内部类
也就是普通的内部类,它在外部类里面一层。
- 成员内部类可以访问外部类的所有成员和方法;
- 外部类要访问成员内部类的成员和方法需要通过实例对象来访问;
- 成员内部类不能含有 static 的变量和方法。想一想,非static的内部类,在外部类加载的时候,并不会加载它;可是你这个内部类却拥有 static 的变量和方法,这是必须先加载的,就会和这个内部类的加载时机冲突事实上,这种写法编译器就能提示错误:
![b8a90ff053faea370f5eee8a909b7778.png](https://img-blog.csdnimg.cn/img_convert/b8a90ff053faea370f5eee8a909b7778.png)
具体的使用方法,参考如下代码及注释:
public class Outer{ private int outi = 0;//外部类的成员 //外部类的方法 public void outPrint(){ System.out.println("out"); } //成员内部类 class Inner{ int ini = outi + 1;//内部类可以访问外部类的成员变量 public void inPrint(){ outPrint();//内部类可以访问外部类的成员方法 System.out.println("in"); } } public static void main(String[