zoukankan      html  css  js  c++  java
  • 十九、Java基础之接口Interface

    一、什么是接口

    /*
    1.接口越是一种引用类型,可以看做类
    1.如何定义接口
    [修饰符] interface 接口名{}
    2.接口中只能出现:常量,抽象方法
    3.接口其实是与特殊的抽象类,特殊在接口是完全抽象的
    4.接口中没有构造方法,接口无法被实例化
    5.接口和接口之间可以多继承
    6.一个类可以实现多个接口(这里的实现可以等同看做“继承”)
    7.一个非抽象的类事件接口,需要将接口中所有的的方法“实现/重写/覆盖”
    */

    public interface Test01 {
    
        //常量:必须使用public static final修饰
        public static final String SUCCESS="SUCCESS";
        public static final double PI=3.14;
    
        //public static final可以省略
        byte MAX_VALUE=127;
        //抽象方法(接口中所有的抽象方法都是public abstract)
        public abstract void m1();
    
        //public abstract可省略
        void m2();
    }
    
    
    interface B{void m1();}
    interface C{void m2();}
    interface D{void m3();}
    
    //接口和接口可以实现多继承
    interface E extends B,C,D{ void m4(); } //implement是实现的意思,是一个关键字 //implement和extends意义相同 class MyClass implements B,C{ //抽象类的重写,否则报错 public void m1(){}; public void m2(){}; }
    //一个类可以实现多个接口
    class F implements E{ public void m1(){}; public void m2(){}; public void m3(){}; public void m4(){}; }

    二、接口的作用

    /*
    1.接口的作用:
    1.可以使项目分层,所有层都面向接口开发,开发效率提高
    2.接口使代码和代码之间耦合度降低,就行内存条和主板的关系,变得“可插拔”,可以随意切换

    */
    例1:CustomerService客户接口 CustomerServiceImpl接口实现类 Test02
    CustomerService
    //客户业务 接口
    public interface CustomerService {
    
        //定义一个退出系统的方法
        void logout();
    }
    CustomerServiceImpl
    /*
    编写接口的实现类
    该类的编写完全是面向接口去实现的
     */
    public class CustomerServiceImpl implements CustomerService{
        public void logout(){
            System.out.println("您已经退出!");
        }
    }

    Test02

    public class Test02 {
    
        public static void main(String[] args){
    
            //要执行CustomerService中的logout
    
            //以下程序面向接口去调用
            //多态
            CustomerService cs=new CustomerServiceImpl();
            cs.logout();
        }
    }

     例2

    /*
    汽车和发动机之间的接口:
    生产汽车的厂家面向接口生产
    生产发动机的厂家面向接口生产

    注意:接口和抽象类都能完成某个功能,优先选择接口
    因为接口可以多实现,多继承
    并且一个类除了实现接口之外,还可以去继承其他类(保留了类的继承)
    */
    //接口
    
    public interface Engine {
    
        //所有的发动机都可以启动
        void start();
    }
    //雅马哈
    public class YAMAHA implements Engine {
    
        //@Override系统可以帮你检查方法的正确性
        @Override
        public void start(){
            System.out.println("YAMAHA启动!");
        }
    }
    //宏达
    public class HONGDA implements Engine{
    
        @Override
        public void start(){
            System.out.println("HONGDA启动!");
        }
    }

    Car

    public class Car {
    
        //引擎
        //面向接口编程
        Engine e;
    
        //Constructor
        Car(Engine e){
            this.e=e;
        }
    
        public void testEngine(){
            e.start();//面向接口调用
        }
    }

    测试 程序

    public class Test01 {
        
            public static void main(String[] args){
        
                //1.生产引擎
                YAMAHA y=new YAMAHA();
        
                //2.生产汽车
                Car c=new Car(y);
        
                //3.测试引擎
                c.testEngine();
        
                //宏达启动
                c.e=new HONGDA();
                c.testEngine();
            }
        }


  • 相关阅读:
    第一次
    ActiveReports 报表控件V12新特性 -- 文本框和标签控件的浓缩
    ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出
    ActiveReports 报表控件V12新特性 -- 可定制的安装设置
    葡萄城报表模板库再次更新!补充医院Dashboard及房地产销售行业报表
    ActiveReports 报表控件V12新特性 -- 页面报表新增子报表
    ActiveReports 报表控件V12新特性 -- 无需ETL处理,即可实现跨数据源分析数据
    使用多级分组报表展现分类数据
    如何将水晶报表(Crystal Report)导入葡萄城报表
    使用葡萄城报表,轻松实现高度精准的报表套打
  • 原文地址:https://www.cnblogs.com/chushujin/p/10090750.html
Copyright © 2011-2022 走看看