Java中接口的默认方法

为什么要使用默认方法

当我们把一个程序的接口写完后 用其他的类去实现,此时如果程序需要再添加一个抽象方法的时候我们只有两种选择

  1. 将抽象方法写在原本的接口中 但是这样写会导致其他所有改接口的实现类都需要实现这个抽象方法比较麻烦

  2. 写另一个接口 让需要的实现类再继承这个接口 但是如果频繁的变动不利于代码的可维护性

复制代码
package day8;
​
public interface FatherInterface {
    void say1();
    void say2();
    public default void say3(){
        System.out.println("say3");
    }
}
​
复制代码
package day8;
​
public class ImplementInterface implements FatherInterface{
    @Override
    public void say1() {
        System.out.println("ImplementInterface say1");
    }
​
    @Override
    public void say2() {
        System.out.println("ImplementInterface say2");
    }
​
    @Override
    public void say3() {
        System.out.println("ImplementInterface say3");
    }
}
​
复制代码
package day8;
​
public class Test {
    public static void main(String[] args) {
        FatherInterface im=new ImplementInterface();
        im.say1();
        im.say2();
        im.say3();
    }
}
​

其中public default void say3(){ System.out.println("say3"); }是接口的默认方法 实现类可以不实现 也可以实现

使用接口中的默认方法可以实现接口的升级

注意: 默认方法不是抽象方法,,所以不强制被重写,但是可以重写 默认方法中的public可以省略 但是default不可以省略

接口中静态方法和默认方法使用

复制代码
package day8;
​
public interface FatherInterface {
    void say1();
     default void say2(){
        System.out.println("调用了默认方法");
    }
     static void say3(){
        System.out.println("调用了静态方法");
    }
}
​
复制代码
package day8;
​
public class ImplementInterface implements FatherInterface{
    @Override
    public void say1() {
        System.out.println("实现类抽象方法");
    }
​
}
​
复制代码
package day8;
​
public class Test {
    public static void main(String[] args) {
        FatherInterface im=new ImplementInterface();
        im.say1();
        im.say2();
        FatherInterface.say3();
    }
}
​

接口中的静态方法只能通过接口调用 实现类也不能调用

因为当实现类实现多个接口的时候 而这些接口中刚好有重名的静态方法时,程序不知道调用哪一个

注意 默认方法可以调用私有的静态方法和非静态方法 静态方法只能调用私有的静态方法

相关推荐
2501_933329553 小时前
媒介宣发技术实践:Infoseek舆情系统的AI中台架构与应用解析
开发语言·人工智能·架构·数据库开发
雨奔3 小时前
Kubernetes DNS 完全指南:服务发现核心机制与实践
java·kubernetes·服务发现
[J] 一坚3 小时前
嵌入式高手C
c语言·开发语言·stm32·单片机·mcu·51单片机·iot
odoo中国3 小时前
Odoo 19技术教程 : 如何在 Odoo 19 中创建 Many2one 组件
开发语言·odoo·odoo19·odoo技术·many2one
逻辑驱动的ken4 小时前
Java高频面试考点场景题14
java·开发语言·深度学习·面试·职场和发展·求职招聘·春招
阿冰冰呀4 小时前
互联网大厂Java求职面试实录:谢飞机的“水货”之路
java·mybatis·dubbo·springboot·线程池·多线程·hashmap
水无痕simon4 小时前
1.单机部署Nacos1.3.2
java
techdashen5 小时前
Cloudflare 如何把一个大型代理拆成三个小服务来提升可靠性
开发语言·rust
geovindu5 小时前
go: Chain of Responsibility Pattern
开发语言·设计模式·golang·责任链模式
十五年专注C++开发6 小时前
WaitingSpinnerWidget: 一个高度可配置的自定义Qt等待加载动画组件
开发语言·c++·qt·waitingspinner