JDK8的新特性
* 接口中可以定义有方法体的方法,如果是非静态,必须用default修饰
* 如果是静态的就不用了
以下是测试代码,测试结论已标注于注释
public class JDK8Test1 {
public static void main(String[] args) {
Demo d = new Demo(); //Demo extends FatherT implements InterT
d.print1(); //输出"father print1".结论:同时继承类和实现接口,父类和父接口(default方法)有同名方法时,继承父类的方法
d.print2(); //输出"father print2".结论:同时继承类和实现接口,父类(非抽象)和父接口(无方法体)有同名方法时,不用再重写此方法,默认使用父类方法
InterT.print(); //输出"InterT static".结论:可以直接接口名.方法名调用接口中的static方法
new InterT() { //匿名内部内需要重写借口中的无方法体方法
public void print2() {
System.out.println("new InterT print2()");
}
}.print1(); //输出"InterT default".结论:匿名内部类可以直接调用default修饰的有方法体方法
Demo2 d2 = new Demo2(); //Demo2 implements InterT
d2.print1(); //输出"InterT default".结论:继承父接口中的default方法
}
}
interface InterT {
int i = 10; //接口中的属性默认静态常量
public static void print() { //接口中可以定义static的有方法体的方法
System.out.println("InterT static");
}
public default void print1() { //接口中可以定义非静态的,用default修饰的有方法体的方法
System.out.println("InterT defaut");
}
public void print2();
}
class FatherT {
public void print1() {
System.out.println("father print1");
}
public void print2() {
System.out.println("father print2");
}
}
class Demo extends FatherT implements InterT {
//并没有重写InterT中的print2()方法
}
class Demo2 implements InterT {
//必须重写InterT中无方法体的print2()方法
public void print2() {
System.out.println(i);
}
} |
|