JDK8新特性之接口总结
2016-06-07 10:55
309 查看
1. 先谈谈JDK8新特性接口
在JDK7以及以前的版本中,接口里的方法都是抽象的,并且不能存在静态方法
所有方法的申名都用 public [返回类型] [方法名](参数列表) [抛出异常];
在jdk8中存在2种类型的方法。
1)静态方法 public static [方法名]([参数列表]) [throws 异常列表]
由于Java中可以同时实现多接口,如果2个接口同时存在同名,同参数的静态方法,如果同子类.静态方法,将不知道访问哪一个。
因此不允许使用【子类.父类静态方法】形式访问,不能通过super方法.
InterA interA = new CImpl();
InterA.method(); //只可以父类名访问静态方法
子类实现多个接口,存在的静态方法并不会冲突。因为只能通过各自父类访问父类静态方法。
public class CImpl implements InterA,InterB
其中InterA InterB存在同名静态方法;甚至子类也可以存在同名方法,但是不能用override修饰,因为static方法不能重写
public static void method(){
System.out.println("子类C中的静态方法");
}
2) JDK8还允许存在默认方法 public default void defaultMethod(){} (default不能省略);
子类重写接口默认方法时,必须去掉default。
@Override
public void defaultMethod(){
System.out.println("子类A中的默认方法,必须去掉default修饰符");
}
子类实现多个接口时,如果存在同名的默认方法,子类将不知道继承哪一个,因此编译器要求子类重写父类中的默认方法;不过注意的事,
子类不能用default修饰,default只能修饰接口中的默认方法。
@Override
public void defaultMethod() {
// TODO Auto-generated method stub
Inter8A.super.defaultMethod();
}
3)优先级的问题
如果一个类继承一个接口的默认方法,同时又继承了另外一个类的方法。
那么子类的方法优先跟父类的方法行为一致.
Inter8A s = new Son();
s.method(); //此处虽然申名是接口类,但是调用子类的方法,而子类的方法跟父类的一致。
在JDK7以及以前的版本中,接口里的方法都是抽象的,并且不能存在静态方法
所有方法的申名都用 public [返回类型] [方法名](参数列表) [抛出异常];
在jdk8中存在2种类型的方法。
1)静态方法 public static [方法名]([参数列表]) [throws 异常列表]
由于Java中可以同时实现多接口,如果2个接口同时存在同名,同参数的静态方法,如果同子类.静态方法,将不知道访问哪一个。
因此不允许使用【子类.父类静态方法】形式访问,不能通过super方法.
InterA interA = new CImpl();
InterA.method(); //只可以父类名访问静态方法
子类实现多个接口,存在的静态方法并不会冲突。因为只能通过各自父类访问父类静态方法。
public class CImpl implements InterA,InterB
其中InterA InterB存在同名静态方法;甚至子类也可以存在同名方法,但是不能用override修饰,因为static方法不能重写
public static void method(){
System.out.println("子类C中的静态方法");
}
2) JDK8还允许存在默认方法 public default void defaultMethod(){} (default不能省略);
子类重写接口默认方法时,必须去掉default。
@Override
public void defaultMethod(){
System.out.println("子类A中的默认方法,必须去掉default修饰符");
}
子类实现多个接口时,如果存在同名的默认方法,子类将不知道继承哪一个,因此编译器要求子类重写父类中的默认方法;不过注意的事,
子类不能用default修饰,default只能修饰接口中的默认方法。
@Override
public void defaultMethod() {
// TODO Auto-generated method stub
Inter8A.super.defaultMethod();
}
3)优先级的问题
如果一个类继承一个接口的默认方法,同时又继承了另外一个类的方法。
那么子类的方法优先跟父类的方法行为一致.
Inter8A s = new Son();
s.method(); //此处虽然申名是接口类,但是调用子类的方法,而子类的方法跟父类的一致。
相关文章推荐
- 图文详解linux环境下jdk1.8安装过程
- JDK1.8之Lambda
- Android studio 使用Lambda
- 5.0 导入错误 出现"Loading data for Android 5.0"
- JDK中Applet的安全性策略探究
- JDK1.8新特性之方法引用(Method References)
- JDK1.5以后各版本新特性
- hadoop 2.2.0 在 windows 8.1 64bit、jdk1.8的编译问题
- java开发 注解相关总结
- JDK1.8新特性
- JDK1.8 JVM内存模型
- java8日期屌炸天特性以及实战
- IReport安装完无法启动
- 坑:JDK升级还能遇到这种错误之一
- java8 学习
- win7系统64为安装jdk、tomcat
- win7 64位 安装java jdk1.8 ,修改配置环境变量
- jdk是什么?jdk1.8安装配置方法
- CentOS7安装jdk1.8
- jdk1.8 idea 项目报错spring验证不通过