这是一个学习笔记
在java中,我们并不能在接口中生成一些代码,只能单纯的写一些方法的声明,但是我们可以在方法中写一个类,在接口中声明的类都是静态的,所以可以叫做嵌套类。
接口中嵌套类的作用在于可以生成一些可以被接口实现类所共同使用的代码,让不同实现类公共调用。
下面给出具体的代码:
interface Exercise20 {
void method();
class Inner implements Exercise20{
static void method1(Exercise20 e20){
System.out.println("I'm public segment");
e20.method();
}
@Override
public void method() {
// TODO Auto-generated method stub
}
}
}
public class Outer implements Exercise20{
public static void main(String[] args){
Outer outer=new Outer();
Exercise20.Inner.method1(outer);
}
@Override
public void method() {
// TODO Auto-generated method stub
System.out.println("I'm implementation");
}
}
我们可以看到,在接口中有一个method方法,通过一个outer类实现它,并且重写了这个方法。同时,这个接口中有一个嵌套类,它也实现了这个接口,重写了method方法,并且嵌套类中新添加了一个静态方法method1(为什么是静态方法呢,等讲解到那里再说),这个method1拥有一个接口类型参数,在方法中使用这个参数来调用method方法,并且是实现某个共同的部分(这里的共同部分是一个输出语句),为什么要使用接口类型作为参数呢(讲解到再说)?
接下来我们来看外部实现类Outer,它实现了接口并且重写了method方法,我们在主函数中生成了一个接口类对象,它指向实现类实例,这个是运行时多态。接下来我们调用接口的内部类的method1方法,并且将这个接口类对象传递进去,其实虽然是接口类对象,其实本质上是实现类实例,接口类中嵌套类中的method1方法使用这个参数就是这个道理,这个参数调用method方法实际上是调用实现了重写的method方法。
虽然这个嵌套类的主要作用是使用嵌套类中公共代码,也就是其中的输出语句,但是这个部分可以通过多态的形式组合使用实现类重写的方法,这是一个十分灵活的使用形式。
以上的总结来自于《Thinking in Java》嵌套类部分。