接口类型作为形式参数的问题
1)提供给接口的子实现类
2)内部类的方式
这里就2)进行展开书写。
什么叫内部类?
内部类顾名思义,在一个类的内部存在的类就叫做内部类。
内部类的特点
内部类可以直接访问外部类的所有,包括私有。
内部类如果需要被外部类访问,那么,需要外部类创建内部类的对象间接访问。(内部类好像更懂外部类。。。)
外部类要访问内部类(非静态的内部类)的成员方法:
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
例子:
//需求:访问内部类中的成员方法
class Outer{
int a = 10 ;
class Inner{
public void show() {
System.out.println(a);//内部类可以直接访问外部类的成员位置
}
}
}
public class TestDemo1 {
public static void main(String[] args) {
Outer.Inner s = new Outer().new Inner();
s.show();
}
}
内部类的分类
内部类又可以分成:
成员内部类:内部类在外部类的成员位置。
成员外部类(局部内部类):内部类在外部类的局部位置(在外部类的某一个方法中)。
关于成员内部类的修饰符
private可以保证安全!我们知道外部类可以创建内部了对象,这对于内部类来说有失安全,被private修饰的内部类不能被外部类创建对象。
static可以把静态的内部类看成是外部类的成员。
匿名内部类
new 类名或者接口名{
方法重写();
}
匿名内部类本质:是继承了该类或者实现了该子类对象
2019年8月9日补充:
内部类使用的形参要用final修饰
在给内部类传递参数的时候,若该形参在内部类中被使用,那么该参数需要被final修饰。(方法形参需要被内部类调用的时候该形参用final修饰)。局部内部类中使用的参数需要外方法声明其为final。