zoukankan      html  css  js  c++  java
  • 接口

     


    1.接口就是一个类的公共规范
    2.接口是一种引用数据类型(其中最重要的是抽象方法)
    3.定义格式
    public interface 接口名称{
    //方法内容
    }

    允许包含的内容:
    jdk7:{常量、抽象方法}
    jdk8:{常量、抽象方法、默认方法、静态方法}
    jdk9(以上):{常量、抽象方法、默认方法、静态方法、私有方法}

    使用:
    1.接口不能直接使用,需要一个实现类来实现接口;
    实现类格式
    public class 实现类名称 implements 接口名称{

    }
    2.接口中的实现类必须覆盖重写接口中所有的抽象方法
    3.创建实现类的对象进行使用

    注意事项:
    1.如果实现类没有覆盖重写接口中所有的抽象方法,那么这个实现类必须是抽象类;
    2.接口没有静态代码块或构造方法;
    3.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口;
    格式:
    public class 实现类名称 implements 接口名称1,接口名称2...{

    }
    4.若实现类所实现的多个接口中,存在重复的抽象方法,那么只需要覆盖重写一次即可;
    5.如果实现类实现多个接口中,存在重复的默认方法,那么实现类一定要对冲突的默认方法覆盖重写;
    6.一个类如果直接父类中的方法和接口当中的默认方法产生了冲突,那么优先使用父类方法;

    接口类的多继承
    1.类与接口是多实现的,一个类可以有多个接口;
    2.接口与接口是多继承的
    (多个父接口的默认方法重复,必须在子类方法中覆盖重写,而且要有default关键字)

    定义一个接口:

    有一个抽象方法poem01;两个默认方法poem02和poem03;

    一个静态方法poemname和一个常变量 NAME_ER="李白"。

     1 public interface Interface01 {
     2     //抽象方法
     3     //格式:public abstract 返回值类型 方法名称(参数);
     4     public abstract  void  poem01();//前面两个关键字是固定的,可以省略(会自动补全);
     5 
     6     //默认方法
     7     /*
     8     格式
     9     public default 返回值类型 方法名称(参数){
    10 
    11     }
    12 
    13     默认方法可以被实现类直接调用,也可以被实现类覆盖重写;
    14 
    15     可以解决接口升级的问题;
    16      */
    17     public default void poem02(){
    18         System.out.println("举杯邀明月,对影成三人");
    19     }
    20     public default void poem03(){
    21         System.out.println("醒时同交欢,醉后各分散");
    22     }
    23 
    24     //静态方法
    25     /*
    26     格式
    27     public static 返回值类型 方法名称(餐数){
    28 
    29     }
    30 
    31     不能通过接口实现类对象来调用接口中的静态方法,应直接通过接口名称来调用静态方法
    32      */
    33     public static void poemname(){
    34         System.out.println("月下独酌");
    35     }
    36 
    37     //私有方法
    38     /*
    39     抽取一个公共方法,解决两个默认(静态)方法重复代码问题,但这个方法不应该让实现类使用,应该私有化;
    40     private  (static) 返回值类型  方法名称(参数){
    41     方法体;
    42     }
    43 
    44     jdk9以上版本允许私有方法;
    45      */
    46 
    47     //常量
    48     /*
    49     常量变量必须使用 public static final  三个关键字修饰
    50     从效果上看与常量一样;
    51     格式
    52     public static final 数据类型  常量名 = 数据值;
    53     使用:接口名称.常量名
    54     (推荐命名:用大写字母和下划线进行分割)
    55      */
    56     public  static final String  NAME_ER="李白";
    57 }

    定义另一个接口

    独有的抽象方法dynasty;和接口1重名的默认方法poem02和抽象方法poem03;

    public interface Interface02 {
        public abstract  void  poem01();
        public abstract  void  dynasty(String str);
        public default  void  poem02(){
            System.out.println("月既不解饮,影徒随我身");
        }
    }

    定义一个父类

    使其拥有与接口1默认方法方法重名的方法poem03;

    public class ForAll {
        public void poem03(){
            System.out.println("醒时同交欢,醉后各分散"+"
    "+"永结无情游,相期邈云汉");
        }
    }

    定义一个实现类去继承上述父类并实现两个接口

    public class MidAutumn extends ForAll implements Interface01,Interface02{
        @Override
        public void poem01(){
            System.out.println("花间一壶酒,独酌无相亲");
        }
    
        @Override
        public void poem02() {
            System.out.println("举杯邀明月,对影成三人"+"
    "+"月既不解饮,影徒随我身"
                    +"
    "+"暂伴月将影,行乐须及春"+"
    "+"我歌月徘徊,我舞影零乱");
        }
    
        @Override
        public void dynasty(String str){
            System.out.print(str);
        }
    
    
    }

    输出测试

    public class Test04 {
        public static void  main(String[] args){
    
            Interface01.poemname();//直接用接口明调用静态方法
            MidAutumn poem = new MidAutumn();
            poem.dynasty("唐"+"	");
            System.out.println(Interface01.NAME_ER);
            poem.poem01();
            poem.poem02();
            poem.poem03();//优先用父类的方法
        }
    }

    输出结果

    /*
    月下独酌
    唐    李白
    花间一壶酒,独酌无相亲
    举杯邀明月,对影成三人
    月既不解饮,影徒随我身
    暂伴月将影,行乐须及春
    我歌月徘徊,我舞影零乱
    醒时同交欢,醉后各分散
    永结无情游,相期邈云汉
    */
  • 相关阅读:
    rs
    stm32f767 usoc3
    stm32f767 RTT 日志
    stm32f767 标准库 工程模板
    stm32f767 HAL 工程模板
    docker tab 补全 linux tab 补全
    docker anconda 依赖 下载 不了
    docker run 常用 指令
    linux scp 命令
    Dockerfile 常用参数说明
  • 原文地址:https://www.cnblogs.com/susexuexi011/p/13790375.html
Copyright © 2011-2022 走看看