JAVA 接口

2022-10-31  本文已影响0人  听见有你的声音

接口的特点

接口就是一种公共的规范标准

接口的使用

MyInterface.java

public interface MyInterface {
    public abstract void usb();
    //定义一个usb接口
    public abstract  void usb3();
    //定义一个usb3.0接口
}

接口的实现
MyInterfaceImpl.java

public class MyInterfaceImpl implements MyInterface{
    @Override
    public void usb() {
        System.out.println("实现了usb接口的功能");
    }

    @Override
    public void usb3() {
        System.out.println("实现了usb3.0接口的功能");
    }
}

接口的使用
Demo1Interface.java

public class Demo1Interface {
    public static void main(String[] args) {
        MyInterfaceImpl impl = new MyInterfaceImpl();
        impl.usb();
        impl.usb3();
    }
}

接口中的功能实现版本要求

java7 常量和抽象方法
java8 默认方法和静态方法
java9 私有方法

接口中的默认方法

接口覆盖重写必须要把基类的抽象方法全部写上
如果接口需要新的功能必然导致原有的功能无法使用,这时候可以使用默认方法

MyInterface.java

 public abstract  void usb3();
  //定义一个usb3.0接口
 //public void usb4(); 
 //如果新添加一个usb4的功能必然导致 之前实现它的类无法使用
    public default void usb4(){
        System.out.println("在默认方法中新添加usb4的 方法 且不会影响到原来的类");
    }

接口中的静态方法使用
MyInterface.java

 public default void usb4(){
        System.out.println("在默认方法中新添加usb4的 方法 且不会影响到原来的类");
    }
    public static void usb5(){
        System.out.println("这是一个静态方法");
        System.out.println("也是和默认方法一样需要写括号体{}");
    }

接口静态方法的使用
Demo1Interface

public static void main(String[] args) {
        MyInterfaceImpl impl = new MyInterfaceImpl();
        impl.usb();
        impl.usb3();
        MyInterface.usb5(); //静态方法不归对象 归类 
    }

接口的私有方法
MyInterface.java

   //在默认方法中 如果有两个方法有大量重复代码这个时候可以用私有方法
    public default void methodA(){
        System.out.println("a方法特有的代码");
        System.out.println("吃饭");
        System.out.println("睡觉");
        System.out.println("跑步");
        System.out.println("学习");
    }
    public default void methodB(){
        System.out.println("B方法特有的代码");
        System.out.println("吃饭");
        System.out.println("睡觉");
        System.out.println("跑步");
        System.out.println("学习");
    }




//解决方法
java版本必须 > 9
    //在默认方法中 如果有两个方法有大量重复代码这个时候可以用私有方法
    public default void methodA(){
        System.out.println("a方法特有的代码");
        method();
    }
    public default void methodB(){
        System.out.println("B方法特有的代码");
        method();
    }

    private  void method(){
        System.out.println("吃饭");
        System.out.println("睡觉");
        System.out.println("跑步");
        System.out.println("学习");
    }


//静态方法

    //在默认方法中 如果有两个方法有大量重复代码这个时候可以用私有方法
    public static void methodA(){
        System.out.println("a方法特有的代码");
        method();
    }
    public static void methodB(){
        System.out.println("B方法特有的代码");
        method();
    }

    private static void method(){
        System.out.println("吃饭");
        System.out.println("睡觉");
        System.out.println("跑步");
        System.out.println("学习");
    }

接口的常量定义和使用

接口也可以定义成员变量 但是必须要使用public static final三个关键词来修饰
格式 [ public static final ] NUM= 10;
常量 一旦赋值无法修改 (修饰符可以不写 效果一样)
常量推荐用全大写 且用_ 下划线分割

总结

1.成员变量其实就是常量 
 [public static final ] 数据类型 常量名称 = 值
注意:
  常量必须赋值,一旦赋值不能改变
  常量名称完全大写且用下划线进行分割
2.接口中最重要的就是抽象方法
  public abstract  返回值类型 方法名称(参数列表);
注意:
  实现类必须覆盖重写接口所有抽象方法,除非实现类还是抽象类
3.从java8开始接口里允许定义默认方法
 public default 返回值类型 方法名称(参数列表){ 方法体;}
注意:
  默认方法也可以被覆盖重写;

4.从java8开始 接口允许定义静态方法
public static 返回值类型 方法名称(参数列表){ 方法体;}
注意:
  应该通过接口名称进行调用,不能通过实现类对象类调用

5.从java9开始 接口允许定义私有方法  
普通私有方法:private 返回值类型 方法名称(参数列表){方法体;}
静态私有方法:private static 返回值类型 方法名称(参数列表){方法体;}
注意:
    private的方法只有接口自己才能调用,不能被实现类或其它调用

使用接口注意
1.接口是没有静态代码块和构造方法的
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{}

继承父类并实现多个接口
MyInterfaceA.java

public interface MyInterfaceA {
    public abstract void runa();
}

MyInterfaceB.java

public interface MyInterfaceB {
    public abstract void runb();
}

MyInterfaceImpl.java

public class MyInterfaceImplAB implements MyInterfaceA,MyInterfaceB{
    @Override
    public void runa() {
        System.out.println("run a");
    }

    @Override
    public void runb() {
        System.out.println("run b");
    }

如果 A 和 B 的方法重名 则实现类覆盖重写一次即可
如果没有完全重写所有方法 则类还是抽象类
如果实现类实现多个接口当中存在重复的默认方法 那么实现类一定要对冲突的默认方法重写
一个类如果父类当中的方法和接口当中的默认方法产生冲突 优先使用父类的

类与类之间是单继承的 直接父类只有一个
类与接口之间是多实现的 一个类可以实现多个接口 public class impl Implements methodA,MethodB{}
接口与接口之间是多继承的 public interface method extends methodA,methodB{}

上一篇 下一篇

猜你喜欢

热点阅读