1.类的五大成员

2.内部类
2.1定义

2.2特点

- 内部类可直接访问外部类的成员,包括私有
Engine中的show方法可直接使用内部与外部的成员

- 外部类要访问内部类的成员,必须创建对象
需创建对象才可使用内部类成员

2.3分类
● 成员内部类
● 静态内部类
● 局部内部类
● 匿名内部类(重要)
3.成员内部类
3.1定义

3.2获取内部类对象
3.2.1.直接创建:内部类不用private修饰时

类型:Outer.Inner 外部类对象调用内部类对象
注意:若内部类用private修饰,则需间接创建
3.2.2.间接创建:
在外部类中编写方法,对外提供内部类
3.2.2.1内部类用private修饰

Test中:
Outer o=new Outer();
Object i=o.getInstance();//多态接收
- 用多态接收,不能写Outer.Inner i=o.getInstance()
- 因为外部识别不到私有化的Inner
3.2.2.2内部类不用private修饰
直接调用返回的方法Outer.Inner i=o.getInstance()
3.3内存分析
- 外部类和内部类是两个不同的空间,但内部类有着外部类的地址
- a是局部,this.a是本类开始,Outer.this.a是外部类


4.静态内部类
4.1定义

4.2.e.g.
静态内部类中,
- 可直接访问外部类的静态变量和静态方法(b)
- 而非静态的需要创建外部类对象(a)

show1是非静态方法,show2是静态方法
4.3.静态内部类中的方法调用
4.3.1非静态方法(无static)
需创建静态内部类对象
4.3.2静态方法(static)
直接调用
5.局部内部类(淘汰)
6.匿名内部类(重要)
6.1定义
隐藏了名字的内部类

6.2解释
- {}内实际上是一个隐去名字的类
- 这个无名类实现了Swim接口/继承了Swim类,并重写了方法
- new Swim()创建了一个无名对象

6.3应用:不用创建太多的类
Animal类中
class Animal{ String name; ............ public void eat(){ Sysout("吃") } }
Test中

- method方法以对象作为形参,调用eat()方法
- 直接在method()中填入一个匿名内部类<继承于Animal>,同时重写了自己的eat()方法

被折叠的 条评论
为什么被折叠?



