1、创建内部类

  1. public class ClassA{
  2. class ClassB{
  3. }
  4. public static void main(String[] args){
  5. ClassB c = new ClassB();
  6. }
  7. }

2、链接到外部类

  1. public class ClassA{
  2. private int i = 0;
  3. private Object[] items;
  4. class ClassB{
  5. public boolean end(){return i == items.length()}
  6. }
  7. public static void main(String[] args){
  8. ClassB c = new ClassB();
  9. c.end();
  10. }
  11. }

虽然 i 和 items都是外部类ClassA的成员,但是内部类ClassB也可以访问。

3、内部类访问外部类

  1. .this 可以返回当前外部类对象的引用
  2. public class ClassA{
  3. private int i = 0;
  4. private Object[] items;
  5. class ClassB{
  6. public ClassA outer(){
  7. return ClassA.this
  8. }
  9. public boolean end(){return i == items.length()}
  10. }
  11. public static void main(String[] args){
  12. ClassB c = new ClassB();
  13. c.end();
  14. }
  15. }

使用.this可以从内部类访问外部类的引用。

4、内部类访问外部类

  1. .new 创建内部类对象
  2. public class ClassA{
  3. private int i = 0;
  4. private Object[] items;
  5. class ClassB{
  6. public ClassA outer(){
  7. return ClassA.this
  8. }
  9. public boolean end(){return i == items.length()}
  10. }
  11. public static void main(String[] args){
  12. ClassA a = new ClassA();
  13. ClassA.ClassB b = a.new ClassB();
  14. }
  15. }

创建内部类对象不能直接创建,需要先创建个外部类对象,然后外部类对象后面加.new 再加内部类构造器才可以创建。(静态内部类不需要)

5、局部内部类

(1)方法的作用域内创建一个完整的类,这被称为局部内部类。

6、匿名内部类

  1. public class ClassA{
  2. public ClassB classB(){
  3. return new ClassB(){
  4. private int i = 0;
  5. public int value(){
  6. return i;
  7. }
  8. };
  9. }
  10. public void main(String[] args){
  11. ClassA a = new ClassA();
  12. }
  13. }