十九、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();
        }
    }

 



posted @ 2018-12-09 12:30  旅行没有终点  阅读(287)  评论(0编辑  收藏  举报