第六章接口与实现
Java不支持多重继承(子类只能有一个父类)
6.1接口
为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口。
使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。
1.接口声明
–接口通过使用关键字interface来声明
–格式:interface 接口的名字
2.接口体
–接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号“;”结尾。如:
接口的变量和方法的构成规则
接口中的变量自动都是public、static,final,
接口中的方法默认为public abstract;接口也产生class文件。
接口中的方法不能被static和final修饰,因为要重写所有接口中的方法。
接口中没有构造函数,方法可以抛出异常
6.2 实现接口
一个类通过使用关键字implements声明自己实现一个或多个接口。
如:class A implements Printable,Addable
如果一个类实现了某个接口,那么这个类必须重写该接口的所有方法。
6.3 接口的UML图
第1层是名字层,接口的名字必须是斜体字形,而且需要用<<interface>>修饰名字,并且该修饰和名字分列在两行。
第2层是常量层,列出接口中的常量及类型,格式是“常量名字:类型”。
第3层是方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”。
6.4 接口回调
接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类重写的接口方法。
Com com;//声明接口对象
ImpleCom obj= new ImpleCom();//实现接口子类对象
com = obj; //接口回调
6.8 abstract类与接口的比较
接口和abstract类的比较如下:
1.abstract类和接口都可以有abstract方法。
2.接口中只可以有常量,不能有变量;而abstract类中即可以有常量也可以有变量。
3.abstract类中也可以有非abstract方法,接口不可以。
6.9 面向接口编程
面向接口去设计程序,可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。
总结
接口的接口体中只可以有常量和abstract方法。
和类一样,接口也是Java中一种重要的引用型数据类型。
当接口变量中存放了实现接口的类的对象的引用后,接口变量就可以调用类实现的接口方法,这一过程被称为接口回调。
和子类体现多态类似,由接口产生的多态就是指不同的类在实现同一个接口时可能具有不同的实现方式。