default
在读java iterator源代码的时候,看到default关键字来修饰remove()方法和forEachRemaining()方法,神奇的是这两个方法在这个接口类中居然有了函数体。故而测试了一下default的用法。
Interface
首先定义了一个Interface类:
public interface Default {
default public void method() {
System.out.println("method in interface");
}
default public void method1() {
System.out.println("method1 in interface");
}
}
DefaultImpl
public class DefaultImpl implements Default{
public static void main(String[] args) {
// TODO Auto-generated method stub
Default d = new main();
d.method();
d.method1();
}
@Override
public void method() {
// TODO Auto-generated method stub
System.out.println("method in main");
}
@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("method1 in main");
}
}
结果
打印出的结果是
method in main
method1 in main
当我把子类中的重写方法删除之后,打印出的结果是
method in interface
method1 in interface
分析
我们都知道,interface类中的方法是没有具体实现的,并且在子类中必须全部继承,而使用了default方法之后,可以直接在Interface中定义方法的具体实现。
补充
@Override:
这个注释,可写可不写,它表示子类继承父类时的方法重写。
编译器会验证@Override下面的方法是否是父类所有,没有就报错。
因此如果我没有添加该注释,若不小心将方法名或者参数写错了,就相当于自己在子类中新添加了一个方法。