/**
*new接口
*不是为了创建接口的实例
*接口没有实例的说法
*是创建一个接口的实现类,相当于创建一个 "接口Impl"
*/
public class TestDemo {
interface Printer {
void printer(String val);
}
public void pringSomething(String something, Printer printer) {
printer.printer(something);
}
public static void main(String[] args) {
TestDemo testDemo = new TestDemo();
String some = "aaaa";
Printer printer = new Printer() {
@Override
public void printer(String val) {
System.out.println(val);
}
};
testDemo.pringSomething(some, printer);
}
}
理解:
new 接口,不是在给接口创建“实例”,因为接口没有“实例”的说法。只有类有实例。所以new 接口,是在给这个接口创建一个实现类,相当于“接口名Impl”。
固,有两种方式:
①interface test , class testImpl implements test
testImpl是test的实现类
new tesstImpl 是 test实现类testImpl的“实例”
“接口” --> “实现类” --> “实现类的实例”
②interface test , new test
new test创建的对象,是test的实现类的“实例’”
然后再重写接口中的方法,实现功能。
“接口” --> " " --> “实现类的实例”
不像第①中,专门有个impl的实现类文件,再new 这个实现类创建“实现类的实例”,第②中是直接在new接口的过程中创建“实现类的实例”,省掉了类文件。
关于具体实现功能
第①中写在impl实现类中的@Override方法中,第二种写在new 接口中的@Override中,一个是在单独的类文件中重写,一个是在new接口的时候重写.
问题:
匿名内部类
匿名内部类的定义是:
new 父类构造器(参数列表)| 实现接口()
{
//匿名内部类的类体部分
}
那么是否是这样理解:
new接口,是new的接口的的匿名内部类的实例,因为匿名内部类实现了接口,重写了接口中的方法,所以本质上new的是接口内部类的实例??