• 面向对象——接口类


    面向对象——接口类

    接口的基础语法

    [修饰符列表] interface 接口名{
        
    }
    
    • 1
    • 2
    • 3

    1.接口也是一种引用数据类型

    2.借口是完全抽象的

    3.接口支持多继承,一个接口可以继承多个接口

    接口中只包含两部分内容,常量和抽象方法

    4.接口中所有元素都是public修饰的

    5.接口中的抽象方法定义时:public abstract修饰符可以省略

    6.接口中的方法都是抽象方法,所以接口中的方法不能有方法体。

    7.接口中常量的public static final 可以省略

    8.一个非抽象类实现接口的时候,必须将接口中的方法加以实现

    9.一个类可以实现多个接口

    10.extends 和 implements 可以共存,extends 在前,implements 在后

    11.使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)

    //Figure.java文件
    package com.shouyerenst;
    public interface Figure {//接口中静态成员变量
        String name = "几何图形";//省略public static final ② 
    	// 绘制几何图形方法
    	void onDraw(); //省略public ③ 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    代码第①行是声明Figure接口,声明接口使用interface关键字,interface前面的修 饰符是public或省略。public是公有访问级别,可以在任何地方访问。省略是默认访问级别,只能在当前包中访问。代码第②行声明接口中的成员变量,在接口中成员变量都静态成员变量,即省略了public static final修饰符。代码第③行是声明抽象方法,即省略了public关键字。

    某个类实现接口时,要在声明时使用implements关键字,当实现多个接口之间用逗号(,)分隔。实现 接口时要实现接口中声明的所有方法。

    实现接口Figure示例代码如下:

    //Ellipse.java文件 
    package com.shouyerenst.imp;
    
    import com.shouyerenst.Figure; 
    //几何图形椭圆形 
    public class Ellipse implements Figure { 
        //绘制几何图形方法 
        @Override 
        public void onDraw() { 
            System.out.println("绘制椭圆形..."); 
        } 
    }
    //Triangle.java文件 
    package com.shouyerenst.imp; 
    
    import com.shouyerenst.Figure; 
    //几何图形三角形 
    public class Triangle implements Figure {
    // 绘制几何图形方法 
        @Override 
        public void onDraw() { System.out.println("绘制三角形..."); 
                             } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    注意 接口与抽象类一样都不能被实例化。

    接口在开发中的作用

    接口在开发中的作用,类似于多态在开发中的作用。降低程序的耦合度,提高程序的扩展性。

    面向接口编程,可以降低程序的耦合度,提高程序扩展力。符合ocp开发原则。接口的使用离不开多态机制

    一个经典案例

    顾客通过菜单点菜,厨师实现菜单内容。

    菜单接口

    package com.shouyerenst.OCP;
    //菜单接口
    public interface Menu {
        //西红柿炒鸡蛋
        void ScrambledEggsWithTomatoes();
        //鱼香肉丝
        void ShreddedFishAndMeat();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    中餐厨师类

    package com.shouyerenst.OCP;
    //中餐厨师
    public class ChineseChef implements Menu{
        //西红柿炒鸡蛋
        public void ScrambledEggsWithTomatoes(){
            System.out.println("中餐厨师做的西红柿炒鸡蛋!!!");
        }
        //鱼香肉丝
        public void ShreddedFishAndMeat() {
            System.out.println("中餐厨师做的鱼香肉丝!!!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    西餐厨师类

    package com.shouyerenst.OCP;
    //西餐厨师
    public class WesternChef implements Menu{
        //西红柿炒鸡蛋
        public void ScrambledEggsWithTomatoes(){
            System.out.println("西餐厨师做的西红柿炒鸡蛋!!!");
        }
        //鱼香肉丝
        public void ShreddedFishAndMeat() {
            System.out.println("西餐厨师做的鱼香肉丝!!!");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    顾客类

    package com.shouyerenst.OCP;
    //顾客
    public class Customer {
        private Menu menu;
        
        //构造方法
        public Customer() {
        }
        public Customer(Menu menu) {
            this.menu = menu;
        }
        
        //get、set方法
        public Menu getMenu() {
            return menu;
        }
        
        public void setMenu(Menu menu) {
            this.menu = menu;
        }
        
        public void order(){//点菜方法
            //Menu m = this.getMenu();
            menu.ScrambledEggsWithTomatoes();
            menu.ShreddedFishAndMeat();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    测试类

    package com.shouyerenst.OCP;
    
    public class Test {
        public static void main(String[] args) {
            //创建厨师对象
            Menu cook1 = new ChineseChef();
            //创建顾客对象
            Customer customer = new Customer(cook1);
            //顾客点菜
            customer.order();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    抽象类与接口区别

    归纳抽象类与接口区别如下:

    1. 接口支持多继承,而抽象类(包括具体类)只能继承一个父类。

    2. 接口中不能有实例成员变量,接口所声明的成员变量全部是静态常量,即便是变量不加 public static final 修饰符也是静态常量。抽象类与普通类一样各种形式的成员变量都可以声明。

    3. 接口中没有包含构造方法,由于没有实例成员变量,也就不需要构造方法了。抽象类中可以有实例成员变量,也需要构造方法。

    4. 抽象类中可以声明抽象方法和具体方法。Java 8之前接口中只有抽象方法,而Java 8之后接口中也可以声明具体方法,具体方法通过声明默认方法实现。

    在这里插入图片描述

    感觉不错的话,动手点个赞吧!

  • 相关阅读:
    opencv 矩形检测与计数
    群辉NAS:ARPL引导黑群晖DSM 7.2详细教程
    AOSP 编译真机镜像与AVD镜像
    微服务线上问题排查困难?不知道问题出在哪一环?那是你还不会分布式链路追踪
    .net第二章数据类型、变量和常量
    【蓝桥备战】DFS、BFS
    redis探索之缓存一致性
    Hadoop
    MATLAB实战Sobel边缘检测(Edge Detection)
    MFC扩展库BCGControlBar Pro v33.6亮点 - 流程图、Ribbon Bar功能升级
  • 原文地址:https://blog.csdn.net/shouyeren_st/article/details/126594079