什么是成员内部类?

62

内部类:

1.java中允许将一个类A声明在类B中,A为内部类,B为外部类
2.外部类的分类:成员内部类 vs 局部内部类(方法内,代码块内,构造器内)
3.成员内部类:
一方面: 作为外部类B的成员:
  • 调用外部类B的结构
  • 可以被static修饰
  • 可以被4种不同的权限修饰
另一方面:作为一个类:
  • 类内可以定义属性,方法,构造器等
  • 可以被final修饰,表示此类不能被继承.言外之意:不适用final,就可以被继承
  • 可以被abstract修饰
public class InnerClassTest {
    public static void main(String[] args) {

        //创建静态的Dog内部类的实例(静态的成员内部类)
        Person.Dog dog = new Person.Dog();
        //创建非静态的Bird内部类的实例(非静态成员内部类)
        Person person = new Person();
        Person.Bird bird = person.new Bird();
        bird.sing();
    }
}
class Person {
    String name;
    int age;

    public void eat() {
        System.out.println("chi");
    }

    //静态成员内部类
    static  class Dog {
    // eat();//不能调非静态
    }

    //非静态成员内部类
    class Bird {
        public void sing() {
            Person.this.eat();//调用外部类的属性
        }
    }
    public void method() {
        //局部内部类
        class A {
        }
    }

    {
        //局部内部类
        class B {
        }
    }

    public Person() {
        //局部内部类
        class C {
        }
    }
}