??内部类分为普通内部类(有名)和匿名内部类。普通内部类分为成员内部类、局部内部类、静态内部类(嵌套内部类)。顾名思义,内部类就是定义在一个类内部的类。什么时候都会使用内部类呢?当我们定义一个类,发现内部还有类时,比如我们定义人体body时,内部还有心、肝、皮、肺、肾,他们既属于body,又是一个独立的器官,这是为了更加方便的描述人体就会选择内部类来实现。
普通类
1、定义
讲一个类定义在另一个类的里面,对里面那个类就叫做内部类,或者嵌套类。
2、成员内部类
????2.1形式:
????????class Outer{
????????class Inner
???????? void function()
????????????{}
????????}
2.2 访问规则
#.内部类可以直接访问外部类中的成员,包括私有。是因为内部类中持有了一个外部类的引用。格式:外部类名.this
#.外部类要访问内部类,必须要建立内部类的对象。
#.内部类作为外部类的成员,可以使用类成员的修饰符来修饰,比如private,static(变为静态内部类)
????2.3 访问格式
????????????当内部类定义在外部类的成员位置上而且非私有且非静态时可以在其他类中直接建立内部类对象访问内部类的成员。比如访问2.1中的function方法可以通过:
方位格式 :外部类名 . 内部类名 变量名 = 外部类对象 . 内部类对象 。
代码示范 :Out . Innter in = new Out() . new Inner();
????????????in . function();
3、局部内部类
????局部内部类,是指内部类定义在方法和作用域内。
????3.1 形式:
????#定义在方法中
????????class Outer{
????????????public
void run()
????????????{
????????????????class
Inner
???????????????? void function()
????????????????????{}
????????????}
????????}
????#定义在作用域中
????class Outer{
????????int b=0;
????????public
void run()
????????{
????????????final
int a=1;
????????????if(true)
????????????{
????????????????class
Inner
???????????????? void function()
????????????????????{
????????????????????????System.out.println(a+":"+b);
????????????????????}
????????????}
????????}
????}
????3.3 访问规则
????????1.不可以被成员修饰符修饰
2.可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
4、静态内部类
????静态内部类就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。
?
?
?
?
?
?
?
?
?