一、定义作用
定义:在一个类中再声明一个类,外面的类叫外部类,里面的类叫内部类或宿主类
(除了局部内部类)
【作用】:内部类专门为了管理外部类内容的
内外部类以及内部类的函数中定义有同名的变量name时
若要调用外部类的name为:外部类名.this.name
若要调用内部类的name为:this.name
内部类函数要调用自己的name,直接使用
二、内部类分类
1,成员内部类
2,静态内部类
3,局部内部类
4,匿名内部类
三、成员内部类
类似于外部类中的成员属性或成员方法
- 1 可以用四种访问权限修饰符修饰
- 2 成员内部类中不能用静态的属性和方法
- 3 成员内部类中可以添加属性和方法
- 4 成员内部类可以使用外部类的属性和方法(包括私有的)
5 如果内部类中的属性和外部类中的属性同名(内部类中优先调用的是内部类的属性和方法)
this 代表的是 内部类对象
想要调用外部类的属性和方法需要通过外部类对象去调用6 创建内部类对象
先创建外部类对象Outer outer = new Outer();
通过外部类对象.new 内部类(); Outer.Inner inner = outer.new Inner();
或者Outer.Inner inner = new Outer().new Inner();- 7 在其他类中创建内部类对象 【需要导包】
四、静态内部类
类似于外部类的静态的属性和方法
格式:static class 类名
可以存在静态或者是非静态的属性或者是方法
内部类属性如果和外部类属性同名了 优先调用的是内部类的
创建对象:
* Inner in = new Inner();
* 也要导包
创建静态内部类对象
Inner inner3 = new Inner();
StaticInner.Inner inner2 = new StaticInner.Inner();
应用场景: 建造者模式
内部类中有静态成员,那么内部类必须是静态的
五、局部内部类(鸡肋,完全没用,了解即可)
定义:在方法中定义的类
局部内部类使用了其所在函数的局部变量是,该局部变量必须是final修饰的
不能用修饰符
里面只可以出现非静态的属性和方法
只能在声明该类的方法中去创建对象
如果想要局部内部类执行 必须调用声明局部内部类的方法
六、匿名内部类
应用情景:只想用一次,若是多次最好建一个类
使用匿名内部类的前提条件:
存在父类或父接口
匿名内部类适用于不能创建对象的抽象类和接口
真正创建的是子类的对象 因为子类是匿名的 需要让父类名字代替
创建方法:
作用:节省代码量