内部类
- 就是类中有嵌套了一个类:内部类
- 如下图,Car和Engine还是有区别的,如果很多代码都这样写就容易堆积成石山代码;
- 所以在类中又详细的划分了一个类Engine,这样能更清晰的描述Car的属性;
内部类的分类
1. 成员内部类
- 写在成员位置,属于外部类的成员;
获取成员内部类对象的两种方式:
- 创建内部类对象的格式:(内部类:Inner 、 外部类: Outer)
Outer.Inner oi = new Outer().new Inner();
- 带成员内部类被private修饰时:在外部编写方法,对外提供内部类对象;
public class Outer{
String name;
private class Inner{
}
public Inner getInstance(){
return new Inner()
}
}
测试类:
Outer o = new Outer();
o.getInstance();//获取内部类的都对象
外部类成员变量和内部类成员变量重名时,在内部类如何访问?
- 内部类中隐含着一个通向外部类的通道 Outer.this
sout(Outer.this.变量名);
静态内部类
代码演示:
局部内部类
匿名内部类(重要)
要求:在测试类中调用goSwimming方法
- 传统方式:
- Student:实现右侧接口,重写方法;
- 注意调用方法goSwimmin时,需要传递这个接口的实现类对象;
问题:如果Student只用一次,单独创建Java文件是否浪费呢?
- 这时候就要用到匿名内部类了
- 使用匿名内部类的解法:
- 匿名内部类的定义格式 = 没有名字的java类 + 继承/实现 + 重写方法 + 创建对象;
- 最终可以理解为:一个没有名字的java类对象;
- 上下两种形式是相同的,都是多态;