Java8对接口的新特性

接口

在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。JDK8及以后,允许在接口中定义static方法和default方法,JDK1.9时,接口又增加了私有方法,用于服务于本接口其他方法。

default方法:必须用default关键字修饰,而且可以被实现类重写,它只能通过接口实现类的对象来调用。
static方法:只能通过接口名调用,不可以通过实现类的类名或者实现类的对象调用。

抽象类和接口的区别

抽象类

  1. 抽象类不能实例化,必须要由继承它的子类来创建实例。
  2. 抽象方法只有方法的声明,没有方法体。抽象类中的抽象方法必须要在子类中重写。
  3. 抽象类中既可以有抽象方法,也可以有普通方法,普通方法可不用重写。
  4. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  5. 抽象类中可以有构造方法,是供子类创建对象时,初始化父类成员变量使用的。
  6. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
  7. 只要包含一个抽象方法的类,该类必须要定义成抽象类。
  8. abstract不能用来修饰属性、构造器等结构。
  9. abstract不能与final并列修饰同一个类。
  10. abstract不能与private、static、final或native并列修饰同一个方法。

接口

  1. 接口没有构造方法,不能创建对象。
  2. 成员变量默认自带修饰符public static final,即为静态常量。
  3. 抽象方法默认自带修饰符public abstract(jdk8之前版本接口中方法只能是抽象方法)
  4. 接口是用来被实现的,其实现类必须重写它的所有抽象方法,除非实现类是个抽象类
  5. 接口可以多实现,一个类可以同时实现多个接口
  6. 接口可以继承接口,接口之间支持多继承
  7. 在JDK1.8时,接口中允许声明默认方法和静态方法:
  8. 公共的默认的方法:其中public 可以省略,建议保留,但是default不能省略
  9. 公共的静态的方法:其中public 可以省略,建议保留,但是static不能省略
  10. 如果子类(或实现类)继承的父类和实现的接口中声明了同名的成员变量,那么在调用的时候会报错,模糊不清。
  11. 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写该方法的情况下,默认调用父类中的同名同参数的方法。-->类优先原则。
  12. 如果实现类实现了多个接口(没有继承),而多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,会报错。-->接口冲突,这就需要我们在实现类中重写此方法;如果两个接口中的静态方法一模一样,并且实现类同时实现了这两个接口,此时并不会产生错误,因为jdk8只能通过接口类调用接口中的静态方法,所以对编译器来说是可以区分的。
  13. 如果需要调用父类中方法或接口中默认方法,父类使用 super.方法名,接口使用 接口名.super.方法名。

参考:
https://www.cnblogs.com/tanghaorong/p/11246043.html
https://blog.csdn.net/sunyufeng22/article/details/120463364

posted @   学海无涯#  阅读(319)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示