接口与接口设计模式
接口是什么
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
我的理解:它是一种特殊的类,特殊在它里面全是由全局常量和公共抽象方法组成,接口它是解决Java语言无法多继承的一种方法,但它更多的则是用来制定标准。(何为标准,标准就是类需要实现我这个接口,那就必须先实现我里面设置的某些方法)
接口是存抽象类
所有成员函数都是抽象函数
所有的成员变量都是public static final
为什么要用接口
- 接口被用来描述一种抽象。
- 接口可以解决Java当中的多继承。
接口与抽象类区别
抽象类中可以中可以有方法体,也就是能实现方法的具体功能,但是接口却不行,接口中只能定义方法,却不能实现它。
抽象类中可以有各种类型的成员变量,但是接口中的成员类型只能是public,static,final类型的。
一个类只能继承一个抽象类,但是一个类却可以实现多个接口。(实现Java中的多继承)
接口的声明:
interface 接口名称 { 声明变量; 抽象方法; }
例:
小结
为了声明接口,我们需要使用interface这个关键字。
接口中的属性类型默认为public,final,static。
接口中的所有方法都在需要去定义,而不需要去实现。(这和抽象类中的方法定义差不多)
一个类要实现这个接口,就必须这个接口中的所有方法体
(例如:节能是一个接口,那变频是一个方法体,如果想要去实现节能,那我们就必须先实现变频。)
重点
我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的。想要实例接口,我们可以使用接口类型的引用指向实现了该接口的对象,从而调用接口中的方法,但实际上是调用了实现该接口的类的方法。(实际上就是Java多态中的特性)
一个类可以实现多个不同的接口。(Java实现多继承)
接口之间可以像类一样实现继承,还可以实现多继承。
一个类如果要实现一个接口,那必须要先实现这个接口中的所有方法。
接口模式的介绍
接口通常代表的是一种承诺,即方法需要实现接口方法名表示的操作,Java将接口概念提升为独立的结构,体现了接口与实现的分离。
接口型模式包括:适配器模式、外观模式、合成模式、桥接模式。
接口实例
UML图
实现接口
类用extends,接口用interface
类可以实现很多接口
接口可以继承接口,但不能继承类
接口不能实现接口
面向接口的编程方式
设计程序时先定义接口,在实现类
任何需要在函数间传入传出的一定是接口而不是的类
是Java成功的关键之一,因为适合多人同时写一个大程序
也是Java被批评的要点之一,因为代码量膨胀起来也很快
Animal类
package demo02.clock.jiekou; /** * Created by lulei on 2019/4/9. */ public interface Animal { void eat(); void speak(); }
Cat类
package demo02.clock.jiekou; /** * Created by lulei on 2019/4/9. */ public class Cat implements Animal { public void eat() { System.out.println("爱吃鱼!"); } public void speak() { System.out.println("喵!喵!喵!"); } }
Dog类
package demo02.clock.jiekou; /** * Created by lulei on 2019/4/9. */ public class Dog implements Animal { public void eat() { System.out.println("爱吃骨头!"); } public void speak() { System.out.println("汪!汪!汪!"); } }
Test类
package demo02.clock.jiekou; /** * Created by lulei on 2019/4/9. */ public class Test { public static void main(String[] args) { Animal cat = new Cat(); Animal dog = new Dog(); System.out.println("-------cat-------"); cat.eat(); cat.speak(); System.out.println("-------dog-------"); dog.eat(); dog.speak(); } }