049_面向对象_22_接口详解
一、接口的概念
接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。接口中只有方法的定义,没有方法的实现
二、定义接口格式
[访问修饰符] interface 接口名 [extends 父接口1,父接口2…] {
常量定义
方法定义
}
访问修饰符:只能是public或默认。
接口名:和类名采用相同命名机制
extends:接口可以多继承且多个接口之间用,分隔
接口中的属性只能是常量,总是:public static final 修饰。不写也是。
方法:接口中的方法只能是:public abstract。 省略的话,也是public abstract.
三、类、抽象类、接口
1、类:只有具体实现。
2、抽象类:具体的规范(抽象的方法)和实现都有。
3、接口:只有规范。
四、接口和抽象类
1、接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。
2、抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。
3、从接口的实现者角度看,接口定义了可以向外部提供的服务。
4、从接口的调用者角度看,接口定义了实现者能提供那些服务。
5、接口是两个模块之间通信的标准,通信的规范。如果能把你要设计的系统之间模块之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体实现了。大家在工作以后,做系统时往往就是使用“面向接口”的思想来设计系统。
五、演示示例
package edu.aeon.test; /** * [说明]:接口的定义 * @author aeon * */ 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); }
测试结果截图:
package edu.aeon.test; /** * [说明]:测试接口的多继承 * * @author aeon * 测试结果:一个接口A继承了多个接口(B,C,D..),那么如果有个类去实现这个接口A、则要实现接口(A,B,C,D...)里面的所有方法 * 现实中比如接口A是你的老板、接口B是你的老板娘、接口C是你的上级某领导、那么ABC所规定的你必须都要去执行。 */ public interface InterfaceA { void aaa(); } interface InterfaceB { void bbb(); } interface InterfaceC extends InterfaceA, InterfaceB { void ccc(); } class TestClass implements InterfaceC { @Override public void aaa() { System.out.println("TestClass.aaa()"); } @Override public void bbb() { System.out.println("TestClass.bbb()"); } @Override public void ccc() { System.out.println("TestClass.ccc()"); } }
六、总结
1.子类通过implements来实现接口中的规范 2.接口不能创建实例,但是可用于声明引用变量类型。 3.一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。 4.接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。 5.常量必然是:public static final。我们不加这些修饰符,也是这样。 6.方法必然是:public abstrac。我们不加这些修饰符,也是这样。 7.接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切。 |