美文网首页
JAVA 接口

JAVA 接口

作者: 听见有你的声音 | 来源:发表于2022-10-31 22:04 被阅读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{}

    相关文章

      网友评论

          本文标题:JAVA 接口

          本文链接:https://www.haomeiwen.com/subject/psrdtdtx.html