zoukankan      html  css  js  c++  java
  • java 接口的学习

    1   什么是接口

    接口是一种引用数据类型。使用interface声明接口,形式:  public interface 接口名称{}                              

    1.1.1 接口的特性

    [1] 接口中可以声明属性接口中定义的所有变量都是static final类型的。

    public interface MyInterface {
        public static final String version = "1.0";
        public int count = 10; // 默认是static final类型
    }

    [2] 接口中的方法都是公共抽象方法

    public interface MyInterface {
        public abstract void showInfo();
        void showInfo3();
        
        // 推荐写法
        public void showInfo2();
    }

    [3] (C)接口不能拥有构造方法,不能用于创建对象

    【4] 接口可以多继承。一个接口可以继承多个其他接口(B)

    public interface CInterface extends AInterface, BInterface {
    
    }

    CInterface接口具备了AB接口中定义的抽象方法。

     

    [5] (A) 一个类可以实现一个或者多个接口,该类称为接口的实现类(implement class).

    实现类必须实现接口的所有(抽象)方法

    public class ImplClassA implements AInterface,BInterface{
    
        @Override
        public void showInfoA() {
            System.out.println("实现接口中的showInfoA");
        }
    
        @Override
        public void showInfoB() {
            System.out.println("实现接口中的showInfoB");
        }
    }

    一个只能继承一个父类,同时实现多个接口。继承在前,实现在后

    public class ImplClass3 extends AbsClass implements AInterface,BInterface{
    
        @Override
        public void showInfoA() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void showInfoB() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void showInfoC() {
            // TODO Auto-generated method stub
            
        }
    
    }

    总结:

    实现类实现接口,必须实现接口中定义的抽象方法。

    >方法即行为,表示一种功能

    >接口定义了一套功能实现类必须实现这些功能> 实现类的能力得到拓展

    1.2接口的应用

    1.2.1    [1]接口表示一种能力

    接口定义的一些系列方法表示的是一种种的能力。接口让实现类实现这些能力实现类的能力得到拓展和升级

    实现类根据自身特性实现接口中定义的方法。

     

    package cn.sxt.interface03;
    
    /**
     * 驾驶接口
     */
    public interface DriveInterface {
        /**
         * 驾驶的方法
         */
        public void drive();
    }
    
    package cn.sxt.interface03;
    
    public class Student implements DriveInterface{
        ////
        public void learn(String cName) {
            System.out.println(this.name+"正在学习"+cName);
        }
    
        @Override
        public void drive() {
            System.out.println(this.name+"正在驾驶...");
        }
    
    }
    
    package cn.sxt.interface03;
    
    public class Teacher implements DriveInterface{
        /// …
    
        @Override
        public void drive() {
            System.out.println(this.name+"正在学习驾驶技术...");
            System.out.println(this.name+"很快学会了飙车...");
        }
        
    }

     

    实现Student具备了驾驶能力,实现类Teacher也具备了驾驶能力,原因是都实现了DriveInterface两个实现类的能力得到了增强。

     

    1.2.2     [2]接口实现多态(B)

    package cn.sxt.interface4;
    
    public class Test01 {
        public static void main(String[] args) {
            
            // 同一引用类型
            USBInterface usbInterface = null;
            
            // 实例不同
            usbInterface = new USBFan();
            // 对同一方法的执行结果不同
            usbInterface.connect();
    
            usbInterface = new USBMouse();
            usbInterface.connect();
            
            usbInterface = new USBDisk();
            usbInterface.connect();
        }
    }

    接口实现多态: 接口类型 引用 实现类对象

    继承实现多态: 父类类型 引用 子类对象

    接口定义的方法被实现类实现,通过接口引用实现类,调用接口的方法时,执行实现类实现的方法。

     

    实现类对象具备接口中定义的能力 一种has a 关系

    子类对象是一种父类类型 一种is a 关系

    1.2.3[3] 面向接口编程(A)

     

    接口表示一约定(协议),约定(规范)实现类应该具备(has a)能力。

     

     

     

    理解:

     

    =>实现类必须实现接口中所有的方法,所以接口规范了实现类的行为

     

    => 接口约定了实现类应该具备的行为。

     

     

     

    面向接口编程

     

    所谓面向接口编程,程序设计时,只关心实现类具备什么能力,而不关心实现类如何实现这个能力。面向接口编程时,面向接口的约定而不考虑接口的具体实现。

     

     

     

    也就是说,面向接口编程时,接口的定义方只关系实现类是否具备接口所定义的能力,而实现类如何被的该能力接口定义方一点都不关心

     

     

    package cn.sxt.interface06;
    
    public class Writer {
    
        // 预留墨盒接口
        private InkBoxInterface inkBoxInterface;
    
        // 预留纸张接口
        private PaperInterface paperInterface;
    
        public InkBoxInterface getInkBoxInterface() {
            return inkBoxInterface;
        }
    
        public void setInkBoxInterface(InkBoxInterface inkBoxInterface) {
            this.inkBoxInterface = inkBoxInterface;
        }
    
        public PaperInterface getPaperInterface() {
            return paperInterface;
        }
    
        public void setPaperInterface(PaperInterface paperInterface) {
            this.paperInterface = paperInterface;
        }
    
        public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) {
            super();
            this.inkBoxInterface = inkBoxInterface;
            this.paperInterface = paperInterface;
        }
    
        public Writer() {
            super();
        }
    
        public void print(String content) {
            System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content);
        }
    }

     

     

     

    1.2.3抽象类和接口的异同比较

     抽象类和接口都是引用数据类型,他们都不能创建对象。

    • 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。

    • 抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。

    • 在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口

    • 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题 => 高内聚,低耦合。接口可以用解耦模块。

     

    public class ImplClass3 extends AbsClass implements AInterface,BInterface{

     

    @Override

    public void showInfoA() {

    // TODO Auto-generated method stub

     

    }

     

    @Override

    public void showInfoB() {

    // TODO Auto-generated method stub

     

    }

     

    @Override

    public void showInfoC() {

    // TODO Auto-generated method stub

     

    }

     

    }

  • 相关阅读:
    module.exports 和 exports的区别
    nodejs概述和理解
    sass的继承,混合宏,占位符的用法总结
    项目发布方式
    扩展运算符和解构赋值的理解
    C3----几个常用的加载图标制作
    gulp和yarn打包工具二分钟包会教程(高阶)
    Java接口
    Tomcat8 连接池
    DAMA
  • 原文地址:https://www.cnblogs.com/FSY15767366954/p/10772034.html
Copyright © 2011-2022 走看看