zoukankan      html  css  js  c++  java
  • Java日志第18天 2020.7.23

    接口

    接口是一种公共规范标准。

    接口是一种引用数据类型,最重要的内容是抽象方法

    使用interface关键字

    接口当中的抽象方法,修饰符必须是两个关键字,public、abstract,两个关键字个选择性省略。

    public interface MyInterface {
    
        public abstract void method1();
        //省略abstract
        public void method2();
        //省略public
        abstract void method3();
    }

    接口使用步骤

    1.接口不能直接使用,必须有一个“实现类”来实现接口。

    格式:

    public class 实现类名称 implements 接口名称{

      //方法体

    }

    2.接口的实现必须覆盖重写接口中所有的抽象方法

    public class MyInterfaceImpl implements MyInterface {
    
        @Override
        public void method1() {
            System.out.println("实现方法1");
        }
    
        @Override
        public void method2() {
            System.out.println("实现方法2");
        }
    
        @Override
        public void method3() {
            System.out.println("实现方法3");
        }
    }

    3.创建实现类的对象进行使用。

    public class Demo01MyInterface {
    
        public static void main(String[] args) {
    
            MyInterfaceImpl myInterface = new MyInterfaceImpl();
            myInterface.method1();
            myInterface.method2();
            myInterface.method3();
        }
    }

    结果如下

    *如果实现类中并没有覆盖重写接口中所有的方法,这个类是抽象类

    接口定义默认方法

    Java 8之后,允许接口定义默认方法,格式如下:

    public default 返回值类型 方法名称(参数列表) { 方法体 }

    默认方法可以解决接口升级问题

    当一个接口有很多的实现类,此时需要定义一个新的方法,不需要在各个需要类中编写方法,而在接口中定义默认方法即可实现。方便了接口的升级。

    public interface MyInterface {
    
        public abstract void method1();
        //省略abstract
        public void method2();
        //省略public
        abstract void method3();
    
        public default void method4(){
            System.out.println("实现方法4");
        }
    }
    public class Demo01MyInterface {
    
        public static void main(String[] args) {
    
            MyInterfaceImpl myInterface = new MyInterfaceImpl();
            myInterface.method1();
            myInterface.method2();
            myInterface.method3();
            myInterface.method4();
        }
    }

    结果如下

    如果在实现类中重写定义默认方法,调用是会调用实现类方法

    public class MyInterfaceImplB implements MyInterface {
        @Override
        public void method1() {
            System.out.println("实现方法1");
        }
    
        @Override
        public void method2() {
            System.out.println("实现方法2");
        }
    
        @Override
        public void method3() {
            System.out.println("实现方法3");
        }
    
        @Override
        public void method4(){
            System.out.println("实现类实现方法4");
        }
    }
    public class Demo01MyInterface {
    
        public static void main(String[] args) {
    
            MyInterfaceImpl myInterface = new MyInterfaceImpl();
            myInterface.method1();
            myInterface.method2();
            myInterface.method3();
            myInterface.method4();
    
            System.out.println("================");
            MyInterfaceImplB myInterface2 = new MyInterfaceImplB();
            myInterface2.method1();
            myInterface2.method2();
            myInterface2.method3();
            myInterface2.method4();
        }
    }

    结果如下

    定义静态方法

    Java 8之后,接口当中允许定义静态方法,格式如下:

    public static 返回值类型 方法名称( 参数列表 ) { 方法体 }

    public interface MyInterface {
        
        //定义静态方法
        public static void method(){
            System.out.println("实现静态方法");
        }
        
    }
    public class Demo01MyInterface {
    
        public static void main(String[] args) {
            //报错!
      //        MyInterfaceImpl myInterface = new MyInterfaceImpl();
        //    myInterface.method5();
    
            MyInterface.method();
        }
        
    }

    注意:不能通过接口实现类的对象来调用接口的静态方法,需要通过接口名称直接调用静态方法。

    定义私有方法

    Java 9之后,接口允许定义私有方法

    1.普通私有方法:解决多个默认方法之间重复代码问题,格式如下:

    private 返回值类型 方法名称

    ( 参数列表 ) { 方法体 }

    2.静态私有方法:解决多个静态方法之间重复代码问题,格式如下:

    private static 返回值类型 方法名称 ( 参数列表 ) { 方法体 }

    public interface MyInterface {
    
        public default void methodA(){
            System.out.println("A");
        }
    
        public default void methodB(){
            System.out.println("B");
        }
        //私有方法
        private void method(){
            System.out.print("实现方法");
        }
    }

    定义成员变量

    必须使用public static final三个关键字,所以其实是一个常量,一旦赋值便不可修改。

    注意事项:

    1.三个关键字可以省略,省略与否效果都是一样的。

    2.接口中的常量必须赋值。

    3.接口中常量名称全部大写,用下划线分隔单词

    使用方法:

    接口名称.成员变量名称

    public interface MyInterface {
    
        public static final int NUM_OF_CLASS = 10;
        int NUM_OF_SEAT = 5;
    }
    public class Demo01MyInterface {
    
        public static void main(String[] args) {
            System.out.println("The number of class is "+MyInterface.NUM_OF_CLASS);
    
            System.out.println("The number of seat is "+MyInterface.NUM_OF_SEAT);
        }
    
    }

    结果如下:

  • 相关阅读:
    000-ESP32学习开发(SDK)-ESP32开发板使用说明
    2-STM32 替换说明-CKS32, HK32, MM32, APM32, CH32, GD32, BLM32, AT32(推荐), N32, HC华大系列
    002-CH579M学习开发-官方资料学习说明,开发板蓝牙(蓝牙定位),网口通信测试
    001-CH579M学习开发-硬件使用说明,下载和运行第一个程序
    STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-硬件使用说明
    17-网络芯片CH395Q学习开发-片内EEPROM读写实验
    16-网络芯片CH395Q学习开发-低功耗实验
    15-网络芯片CH395Q学习开发-DNS 域名解析
    14-1-网络芯片CH395Q学习开发-WEB服务器-网页到底是啥, web服务器是啥, 网页如何显示的显示图片和视频
    13-网络芯片CH395Q学习开发-模块使用Socket0作为MAC RAW
  • 原文地址:https://www.cnblogs.com/Gazikel/p/13368122.html
Copyright © 2011-2022 走看看