内部类
基本介绍:
一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类车称为外部类(outer class),是我们类的第五大成员(属性,方法,构造器,代码块,内部类),内部类最大的特点就是可以直接访问私有属性,并且可以提现类与类之间的包含关系。内部类是学习的难点和重点,底层源码又大量的内部类
基本语法
class Outer{//外部类 class Inner{//内部类 } } class Other{//其他类 }
内部类的分类:
定义在外部类局部位置上(比如方法内):
1.局部内部类(有类名)
-
- 可以直接访问外部类的所有成员,包含私有的;
- 不能添加访问修饰符,因为他的地位就是一个局部变量,局部变量是不能使用修饰符的,但是 可以使用final修饰了因为局部变量也可以使用final
- 作用域,仅仅在定义他的方法或代码块中
- 局部内部类--访问--外部类的成员(直接访问)
- 外部类--访问--局部内部类的成员 访问方式:创建对象,再访问(必须在作用域内)
- 局部内部类定义在方法中/代码块
- 作用域在方法体和代码块中
- 本质是一个类
- 外部其他类--不能访问--局部内部类
- 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类.this.成员 相当于调用方法的对象)去访问
-
public class InnerClass01 { public static void main(String[] args) { Outer outer = new Outer(100); outer.m1(); } } class Outer{ private int n1 =100; public Outer(int n1) { this.n1 = n1; } public void m1(){ System.out.println("m1"); //int n1 = 1000; class Inner{ //private int n1 = 10000; public void fun(){ System.out.println(n1 +"fun内部类调用"); } } Inner inner = new Inner(); inner.fun(); } { System.out.println("代码块"); } class Inner{//内部类 } }
2.匿名内部类(无类名)
定义在外部类的成员位置上:
1.成员内部类(没用static修饰)
2.静态内部类(使用static修饰)