十九、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(); } }
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。