zoukankan      html  css  js  c++  java
  • 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 啊!...哦...啊...
    */

    其他类似案例场景

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

  • 相关阅读:
    R语言:提取路径中的文件名字符串(basename函数)
    课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 0、学习目标
    numpy.squeeze()的用法
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 4、Logistic Regression with a Neural Network mindset
    Python numpy 中 keepdims 的含义
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 3、Python Basics with numpy (optional)
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 2、编程作业常见问题与答案(Programming Assignment FAQ)
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 0、学习目标
    课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 0、学习目标
    windows系统numpy的下载与安装教程
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14599176.html
Copyright © 2011-2022 走看看