49

xiaoxiao2021-02-28  105

接口(interface)

普通类:只有具体实现抽象类:具体实现和规范(抽象方法) 都有!接口:只有规范!

为什么需要接口?

接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。

从接口的实现者角度看,接口定义了可以向外部提供的服务。

从接口的调用者角度看,接口定义了实现者能提供那些服务

如何定义接口?

**格式:** [访问修饰符] interface 接口名 [extends 父接口1,父接口2…] { 常量定义//接口中的属性只能是常量,总是:public static final 修饰。不写也是。 方法定义//接口中的方法只能是:public abstract。 省略的话,也是public abstract. /* 访问修饰符:只能是public或默认。 接口名:和类名采用相同命名机制 extends:接口可以多继承 */ }

接口的本质探讨

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。

接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。

OOP的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计 模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

接口使用要点

子类通过implements来实现接口中的规范接口不能创建实例,但是可用于声明引用变量类型。一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。常量必然是:public static final。 我们不加这些修饰符,也是这样。方法必然是:public abstrac。 我们不加这些修饰符,也是这样。接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切。 public interface MyInteface { //接口中只有常量和抽象方法 /*public static final*/ String MAX_GREAD = "BOSS"; int MAX_SPEED = 120; /*public abstract*/ void test01(); public int test02(int a,int b); } public interface Flyable { int MAX_SPEED = 11000; int MIN_HEIGHT = 1; void fly(); } interface Attack { void attack(); } class Plane implements Flyable{ @Override public void fly() { System.out.println("飞机靠发动机飞!"); } } class Man implements Flyable{ @Override public void fly() { System.out.println("跳起来,飞!"); } } class Stone implements Flyable, Attack{ int weight; @Override public void fly() { System.out.println("被人扔出去,飞!"); } @Override public void attack() { System.out.println("石头攻击!"); } } public class Test { public static void main(String[] args) { Flyable f = new Stone(); f.fly(); } } public interface InterfaceA { void aaa(); } interface InterfaceB { void bbb(); } interface InterfaceC extends InterfaceA,InterfaceB { void ccc(); } class TestClass implements InterfaceC{ @Override public void aaa() { // TODO Auto-generated method stub } @Override public void bbb() { // TODO Auto-generated method stub } @Override public void ccc() { // TODO Auto-generated method stub } }
转载请注明原文地址: https://www.6miu.com/read-30788.html

最新回复(0)