接口

接口

接口就是一种公共的规范标准,只要符合规范标准,大家就能通用。

一、接口定义的基本格式
  1. 接口是多个类的公共规范
  2. 接口是一种引用数据类型,最重要的内容就是其中的抽象方法。
  3. public interfaces name{ }

备注:换成了interface后,编译生成的字节码文件也是.class

接口中可以包含的内容有:常量、抽象方法(java 7) 默认方法、静态方法(java 8) 私有方法(java 9)

public  interface Demo{
    
}
二、接口中的抽象方法定义
  • 在任何版本的jdk中都能定义抽象方法。
  • 抽象方法格式: public abstract 返回值 methodName();

注意事项:

  1. 接口当中的抽象方法,修饰符必须是两个固定的关键字,public abstract.
  2. 这两个关键字可以选择性省略。
  3. 方法的三要素,可以随意选择。
public  interface InterfaceDemo{
    public abstract void methodAbs1();
    public abstract void methodAbsb();
    void methodAbsa();
}
三、接口使用步骤
  • 接口不能直接使用,必须有一个实现类实现该接口。

  • 接口的实现类必须重写,接口的所有抽象方法。

  • 创建实现类的对象,进行使用。

    注意事项:

    如果实现类没有重写所有的接口抽象方法,那么实现类必须是抽象类

public  class InterfaceDemoImpl implements InterfaceDemo{
    public void methodAbs1(){};
    public void methodAbsb(){};
    public void methodAbsa(){};
   
}
四、接口的默认方法定义

java 8 开始,接口里允许定义默认方法

**格式:**public default 返回值类型 methodName(){}

**备注:**解决接口升级问题

//接口
public  interface InterfaceDemo{
    public abstract void methodAbs1();
    public abstract void methodAbsb();
    void methodAbsa();
}

//实现类A
public  class InterfaceDemoImplA implements InterfaceDemo{
    public void methodAbs1(){};
    public void methodAbsb(){};
    public void methodAbsa(){};
    
   
}
//实现类B
public  class InterfaceDemoImplB implements InterfaceDemo{
    public void methodAbs1(){};
    public void methodAbsb(){};
    public void methodAbsa(){};
   
    }
   
}

**本来已经写好接口和实现类。因为某种原因,接口中新增了新的抽象方法。则实现类会出错。**为了保证接口更改而不影响实现类,则使新增的抽象带有默认的方法体,即默认方法。

五、默认方法的使用

public  interface InterfaceDemo{
    public abstract void methodAbs1();
    public abstract void methodAbsb();
    void methodAbsa();
    //新添加的默认方法
    public default void methodDefault(){
        System.out.println("默认方法");
    }
}

默认方法会被实现类继承下去。

public  class InterfaceDemoImpl implements InterfaceDemo{
    public void methodAbs1(){};
    public void methodAbsb(){};
    public void methodAbsa(){};
     
}

public class Demo {
     public static void main(String[] args){
        interfaceDemoImpl interfaceDemo = new interfaceDemoImpl();
        interfaceDemo.methodAbs1();
         interfaceDemo.methodDefault();//--》默认方法
    }
}
  1. 接口的默认方法,可以被实现类继承

  2. 接口的默认方法,可以被实现类覆盖重写

六、接口的静态方法定义和使用

1.定义

java 8开始,接口中允许定义静态方法

格式:public static 返回值类型methodName(参数列表){方法体}

2.使用

静态和对象没有关系,和类(接口)有关系

public interface MyinterfaceStatic{
    public static void methodStatic(){
         System.out.println("静态方法");
    }
}

public class MyinterfaceStaticImpl implement MyinterfaceStatic{
    
    
}
public class Demo3Interface{
    MyinterfaceStaticImpl impl=new MyinterfaceStaticImpl();
    //通过接口名称调用静态方法
    MyinterfaceStatic.methodStatic();
}

七、接口中的私有方法定义和使用

(一)定义

问题描述:默认方法中有重复代码,抽离出来之后,又不想让实现类访问抽离出来的方法。

解决方法:java9开始允许定义私有方法

普通私有方法,解决多个默认方法之间有重复代码问题

格式:private 返回值类型 methodName(参数列表){}

**静态私有方法,**解决多个静态方法之间重复代码的问题。

格式:private static 返回值类型 methodName(参数列表){}

public interface MyInterfacePrivateA{
    public default void methodDefault1(){
        System.out.println("default方法1");
        // System.out.println("重复代码");
      methodDefault3();
        
    }
     public default void methodDefault2(){
        System.out.println("default方法2");
          //System.out.println("重复代码");
         methodDefault3();
    }
     private  void methodDefault3(){
                System.out.println("重复代码");
    }
    //修改带有重复代码的方法,让其调用私有方法即可
}

(二)使用

public class  MyInterfacePrivateAImpl implements  MyInterfacePrivateA{
     MyInterfacePrivateAImpl impl=new  MyInterfacePrivateAImpl();
}
静态方法
public interface MyInterfacePrivateA{
    public static void methodStatic1(){
        System.out.println("default方法1");
        // System.out.println("重复代码");
        methodStatic3();
    }
     public static void methodStatic2(){
        System.out.println("default方法2");
         // System.out.println("重复代码");
         methodStatic3();
    }
     private  static void methodStatic3(){
                System.out.println("重复代码");
    }
    //修改带有重复代码的方法,让其调用私有方法即可
}

八、接口的常量定义和使用

接口当中也可以定义成员变量,但是必须使用 public static final 三个关键字修饰,[这三个关键字可以省略]从效果上看,这其实就是接口的常量。

**格式:**public static final Datatype Name = value;

注意事项:

  1. public static final 这三个关键字可以省略。
  2. 接口中的常量必须进行赋值。
  3. 接口中常量必须大写,下划线分割
public interface MyInterfaceConst{
    public static final int NUM=0;
}
public class Demo{
    public statci void main(String [] args){
       int i= MyInterfaceConst.NUM;
    }
}

九、接口内容小结

java 9 +版本:

1.成员变量其实是常量。

2.接口中最重要的是抽象方法,格式 public abstract 返回值类型 名称(参数列表);

3.java 8 开始有默认方法。可以被覆盖重写,public default 返回值类型 名称(参数列表){方法体}

4…java 8 开始有静态方法。public static 返回值类型 名称(参数列表){方法体},通过接口调用。

5.java 9开始允许定义私有方法,private static/空 返回值类型 名称(参数列表){方法体}

注意:

  1. 接口 没有静态代并且接口不能写构造方法
  2. 一个类的父类是唯一的,但是可以同时实现多个接口。class Demo implements Interface A,InterfaceB{}
  3. 如果实现类实现的多个接口中有重复的抽象方法,则只需要实现一次。
  4. 如果实现类没有覆盖重写所有接口中的抽象方法,则实现类必须是抽象类。
  5. 如果实现类实现的多个接口中有重复的默认方法,则实现类必须对默认方法进行重写。
  6. 一个类如果直接父类当中的方法,和接口当中的方法产生了冲突,则使用父类当中的方法(继承优先于接口)。

十、类和接口之间的关系

  • 类与类之间是单继承的,直接父类只有一个。
  • 类与接口之间是多实现的,一个类可以实现多个接口。
  • 接口与接口之间是多继承的:public interface InterfaceC extends InterfaceA, InterfaceB{ }。

注意事项:

  1. 多个父接口的抽象方法如果重复,没有影响
  2. 多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的重写,而且带着default关键字。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值