• Java面向对象之 接口: [修饰符] interface 接口名 {...};子接口:[修饰符] interface 接口名 extends 父接口,父接口2...{...}


    1、什么是接口?

    类比抽象类,把功能或者特性类似的一类 抽象的更彻底,可以提炼出更加特殊的“抽象类”----接口

    2、如何定义接口

    语法:

     [修饰符] interface 接口名 {

      N个常量定义...

      N个抽象方法定义...

      N个内部类、接口、枚举定义....

      N个私有方法,默认方法或者类方法定义

    }

    修饰符一般为public 即可以跨包访问,绝大多数情况接口都是需要跨包访问的

     3、接口特性注意:

    1. 接口修饰符public可以省略,省略后不能在包外访问,所以99%+ 实际应用中都是需要public

    2. 不支持变量定义,定义出来的变量都是常量。也就是说默认都是被隐藏的static、final修饰的类变量

      如下两行代码效果一样

      int maxNum = 10;
      public static final int maxNum = 10;
    3. 接口中定义的方法,认都是public (公开)、abstract  (抽象) 的。必须被类实现,

    4. java9接口中还可以定义默认方法。当实现类中没有重写方法的话,调用的就是这个默认方法。

    5. java9接口中还可以使用private的方法。这些private 的方法就是给默认方法充当工具方法的。

    示例:图形接口

    package com.zmd.study.interface_example;
    
    /**
     * @ClassName Shape
     * @projectName: object1
     * @author: Zhangmingda
     * @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承
     * date: 2021/3/30.
     */
    public interface Shape {
        /**
         * 接口中定义的变量 默认为常量:自动被public static final 修饰
         * 如下mxNum变量的定义等于:public static final int maxNum = 10;
         */
        int maxNum = 10;
        //public static final int maxNum = 10;
        /**
         * 获取平面图形的类型
         */
        public abstract String getType();
    
        /**
         * 获取平面图形的周长
         */
        public abstract double getPerimeter();
    }

    三角形类实现接口

    package com.zmd.study.interface_example;
    
    /**
     * @ClassName Triangle
     * @projectName: object1
     * @author: Zhangmingda
     * @description: 类实现了接口功能,使用implements关键字
     * date: 2021/3/30.
     */
    public class Triangle implements Shape {
        /**
         * 三角形的三边长类型定义
         */
        private double a;
        private double b;
        private double c;
    
        /**
         * 构造方法,创建三角形实例必须提供三边长度
         */
        public Triangle(double a, double b, double c) {
            /**
             *@params [a, b, c] 三角形三边长度
             *@return null
             *@创建时间 2021/3/30
             */
            if(a+b < c || a+c < b || b+c < a){
                System.out.println("Failed!:三角形的两边之和必须大于第三边");
                return;
            }
            this.a = a;
            this.b = b;
            this.c = c;
        }
    
        @Override
        public String getType() {
            if(a+b < c || a+c < b || b+c < a){return "未知图形";}
            return "三角形";
        }
    
        @Override
        public double getPerimeter() {
            return a + b + c;
        }
    
    }

    测试运行

    package com.zmd.study.interface_example;
    
    /**
     * @ClassName InterfaceTest
     * @projectName: object1
     * @author: Zhangmingda
     * @description: XXX
     * date: 2021/3/30.
     */
    public class InterfaceTest {
        public static void main(String[] args) {
            Shape triangle = new Triangle(3,4,5);
            System.out.println(triangle.getType());
            System.out.println(triangle.getPerimeter());
        }
    }
    /**
    输出:
    三角形
    12.0
    */

    4、接口的默认方法 default 修饰 (java 9新特性)

    实现类中没有重写方法的话,调用的就是这个默认方法。

    如上Shape.java中 增加default修饰的方法

    package com.zmd.study.interface_example;
    
    /**
     * @ClassName Shape
     * @projectName: object1
     * @author: Zhangmingda
     * @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承
     * date: 2021/3/30.
     */
    public interface Shape {
        ...同上省略
    /** * 定义一个默认方法;如果实现接口的类没有写这个方法,也可以使用 */ default public void printMe(){ System.out.println("我是:" + getType() + "我的周长是:" + getPerimeter()); } }

    三角形类同上:Triangle.java

    测试类实例化三角形Triangle()调用printMe()方法

    public class InterfaceTest {
        public static void main(String[] args) {
            Shape triangle = new Triangle(3,4,5);
            System.out.println(triangle.getType());
            System.out.println(triangle.getPerimeter());
            triangle.printMe();
        }
    }
    /**
    三角形
    12.0
    我是:三角形我的周长是:12.0
    /*

    5、接口中的private的方法(java9新特性)

    作用:完全是给default 默认方法充当工具方法,当有多个default方法有共同的代码的时候,可以单独列出来。

    package com.zmd.study.interface_example;
    
    /**
     * @ClassName Shape
     * @projectName: object1
     * @author: Zhangmingda
     * @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承
     * date: 2021/3/30.
     */
    public interface Shape {
        ...省略如上代码...
    
        /**
         * 定义一个默认方法;如果实现接口的类没有写这个方法,也可以使用
         */
        default public void printMe(){
            beforPrintMe();
            System.out.println("我是:" + getType() + "我的周长是:" + getPerimeter());
            
        }
        /**
         * java9 特性:接口可以用private 私有的方法,给default方法充当工具方法
         */
        private void  beforPrintMe(){
            System.out.println("beforPrintMe()....干了一些活");
        }
    }

    三角形类同上:Triangle.java

    测试类实例化三角形Triangle()调用printMe()方法

    package com.zmd.study.interface_example;
    
    /**
     * @ClassName InterfaceTest
     * @projectName: object1
     * @author: Zhangmingda
     * @description: XXX
     * date: 2021/3/30.
     */
    public class InterfaceTest {
        public static void main(String[] args) {
            Shape triangle = new Triangle(3,4,5);
            System.out.println(triangle.getType());
            System.out.println(triangle.getPerimeter());
            triangle.printMe();
        }
    }
    /**
    三角形
    12.0
    beforPrintMe()....干了一些活
    我是:三角形我的周长是:12.0
    */

    6、子接口定义(接口的继承)

    语法:

     [修饰符] interface 接口名 extends 父接口,父接口2...{

      ....同上

    }

    示例:

    动物接口、人接口、女人接口;女人接口继承动物和人。wife 类实现女人接口。wife类就具有如上接口的default方法

    动物接口

    package com.zmd.study.interface_example;
    
    public interface Animal {
        default void yell(){
            System.out.println("动物 啊....叫喊!!!");
        }
    }

    人接口

    package com.zmd.study.interface_example;
    
    public interface Person {
        default void makeLove(){
            System.out.println("Person makeLove 啊!...哦...啊...");
        }
    }

    女人接口

    package com.zmd.study.interface_example;
    
    public interface Woman extends Animal, Person{
    }

    wife类

    package com.zmd.study.interface_example;
    public class Wife implements Woman {
    }

    测试类

    package com.zmd.study.interface_example;
    
    public class InterfaceTest {
        public static void main(String[] args) {
            Wife wife = new Wife();
            wife.yell();
            wife.makeLove();
        }
    }
    /**
    动物 啊....叫喊!!!
    Person makeLove 啊!...哦...啊...
    */

    7、一个类实现多个接口

    用一个学生类实现6中的Animal、Person接口。并增加自己的功能

    学生类Student.java

    package com.zmd.study.interface_example;
    
    public class Student implements Animal,Person  {
        public void study(){
            System.out.println("学习");
        }
    }

    测试类

    package com.zmd.study.interface_example;
    
    /**
     * @ClassName InterfaceTest
     * @projectName: object1
     * @author: Zhangmingda
     * @description: XXX
     * date: 2021/3/30.
     */
    public class InterfaceTest {
        public static void main(String[] args) {
            Student student = new Student();
            student.study();
            student.yell();
            student.makeLove();
    
        }
    }
    
    /**
    学习
    动物 啊....叫喊!!!
    Person makeLove 啊!...哦...啊...
    */

    其他类似案例场景

    接口实现业务逻辑课插拔,更换数据库直接改配置文件即可。

  • 相关阅读:
    制作本地 odoo deb包安装镜像
    用Lua实现string的trim()方法
    UGUI之控件以及按钮的监听事件系统
    UGUI之不规则按钮的响应区域
    Unity接第三方SDK时遇到的坑
    AI设计
    Unity UGUI 的RectTransform参数的设置
    Lua string库详解
    lua正则表达式如何匹配中文
    kubernetes pod的生命周期
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14599176.html
Copyright © 2020-2023  润新知