第6章 接口和实现
1接口是java和C#使用的一种基本数据类型
6.1 接口
1接口声明
接口使用关键字interface来进行声明
eg:interface 接口的名字
2接口体
接口体中包含常量的声明和抽象方法两部分(没有变量)
注意一定的要求:接口体中只有抽象方法,而且是public
接口体中常量一定是public,而且是static常量
常量的(public static,final)和方法中的(public abstract)完全可以省略
全加上的顺序是public final static int a
6.2 实现接口
1.在java中,一个类需要在类声明中使用关键字inplements声明该类实现一个接口,如果要实现多个,中间用逗号隔开
2.如果一个非抽象类实现了某个接口,那个该类必须重写接口中的所有方法,,,不仅去掉abstract,而且要加上public,(不能降低访问权限)
3如果一个类实现了一个类,但是没有重写所有接口中的方法,那么这和类必须是抽象类。 抽象类既可以重写接口中的方法,也可以直接继承
4程序可以用接口名访问接口中的常量,,,,如果一个类实现了接口,那么在该类中可以直接使用接口中的常量
5定义接口的同时,如果在接口的前面加上public,那么这样的接口就是一个public接口,可以被任何一个类实现,,,如果不加public修饰,那么就是友好接口,只能被同一包中的类实现
6如果父类实现了某个接口,那么子类自然实现了这个接口,不用再使用inplements声明
7接口也可以被继承,即一个接口是另一个接口的子接口,由于接口中的常量和方法都是public,所以子接口将继承父类中的所有常量和方法
8java提供的接口都在相应的包中,java不仅提供相应的类,也提供相应的包,都可以通过import语句来进行引用
eg:import java.to.*;不仅引入了java。to包中的类,也引入了包中的接口
6.3理解接口
1. 接口的思想在于他可以要求某些类具有相同名字的方法,但是方法具体的·1实现内容可以不同
6.4接口回调
1.接口属于引用型变量,接口变量中可以存放实现该接口的类的实例的引用;
2.在java语言中,接口回调指的是可以把实现某一个接口的类创建的对象的引用赋值给该接口声明的变量,那么该接口变量就可以调用被类实现的接口的方法。其实实际上,当接口变量调用被类实现的接口的方法的时候,其实就是通知相应的对象调用这个方法。
6.6接口与多态
由接口产生的多态主要是指不同的类在实现同一接口时,可能会有不同的实现方式,那么接口变量在回调接口方法的时候就可能产生不同的形态
6.7接口参数,
如果一个方法的参数是接口类型,那么可以将任何实现该接口的类的实例传给这个参数,之后就可以在这个方法中通过接口的变量调用实现接口类的重写的方法或新增的方法
6.8 abstract类和接口的比较
对于选择的问题,如果需要从父类继承一些变量或者是继承一些重要的非abstract方法,就可以考虑使用abstract方法,如果某个问题不需要继承,那只需要若干个类给出abstract方法的实现,那么就可以考虑使用接口
6,9面向接口编程
我们应该怎么建立正确的接口呢?
每当用户有新的需求的时候,就会导致修改类的某部分代码,那么就应当将这部分代码从类中分割出去,使他和程序中某些代码是松耦合关系,即将每种可能的变化对应的交给实现接口的类,(或是抽象类的子类)去负责完成。
在使用多态设计程序的同时,要熟练使用接口回调技术,以及面向接口编程思想,以便体现程序设计所提倡的开闭原则