Java基础对接口的理解
我们知道抽象类是它下面所有的类抽象出来的模板,抽象类的子类都具有相同的行为,只是有不同的实现,从而在抽象类中用抽象方法的形式定义,在具体的子类中实现。
如果将这种抽象进行的更彻底,那么可以提炼出一种更为特殊的“抽象类” -----接口(interface)(注意,接口不是抽象类)在接口中所有的方法都是抽象方法,因为是抽象方法,所以也不会进行具体的实现
在生活中,我们常常发现很多不同的类,也有相同的行为,在JAVA语言中,就可以用接口把这个行为独立的抽取出来,然后让这个行为可以让更多的类实现。我们都知道Java中类是单继承的,大大的降低了语言的丰富度,而接口就是为了解决JAVA单继承所带来的丰富度不够的情况 。
接口不是类,但是也有相似的地方,都可以存放任意数量的方法;都保存为.java为后缀名的文件;而且接口名也要与文件名匹配;编译后都是后缀名为.class.的文件,字节码文件都必须放置在和包名称相匹配的一个目录结构中。
不同处:接口不能被实例化;接口没有构造器,内部所有的方法都是抽象的,而且不能有变量;唯一可以出现在接口中的只有静态常量属性;接口也不能被类继承,但是接口可以继承多个接口。
语法: public interface 接口名{……………}
接口与类的区别
1、接口的名字必须与它所在的java文件名保持一致,
2、接口的访问修饰符,只是public,就算不写也默认为public。
3、接口里面的属性只能是 public static或者是fianl的。
4、接口是没有初始化块,也不能有初始化块,不管是实例还是静态的
5、接口没有构造方法,因为它不能产生对象
6、接口里面只有抽象方法,访问修饰符也只能是public abstact,不写也行,但默认的也是public abstact;但是在JDK1.8当中,可以定义实现了的方法,但是要把abstact换成关键字 default
7、接口是可以多继承的,它可以同时继承多个别的接口
那么我们怎么在类中实现接口呢?
接口与类的关系叫:实现
在类的类名后面加上关键字**implements**
,这个时候我们称之为某个接口的实现类。
**public abstract class 类名 implements 接口名1,接口名2**
类在继承父类的同时,也可以实现接口,而继承只能单继承,但是实现接口可以多实现!语法上先继承,再实现,如果没有写继承,则默认继承Objcet
public abstract class 类名 extend 父类名 implements 接口名1,接口名2
如果一个类实现了接口,那么这个类必须实现接口内的所有抽象方法,否则这个类就为抽象类。
接口可以强制让某一个类具有某些行为;
同抽象类一样,接口的引用也可以指向现实类的对象的,只是接口的引用只能看到对象所于这个接口的行为,这也意味着如果我们强转这个对象的引用为这个对象的实现类时,我们就可以调用这个对象的所有方法和属性(前提的知道这个对象是哪个类型)。那么当我们传参时,传的是这个接口类型的话,只要是这个接口是实现类,我们都可以传入进去,这也体现除了多态的动态绑定方式。
接口的设计原则:接口隔离原则(最小接口原则),设计中,劲量的保证接口的单一性
比如单一的功能;或者成对出现的方法如:开灯,关灯;
那么接口和抽象类的区别在哪里呢?
相同点:
它们都位于继承树的顶端,都被用于实现或继承其他类。
两者都不能被实例化,都拥有抽象方法,实现接口或者是继承抽象类都必须实现它们当中的抽象方法。
不同点:
1、抽象类只能被继承,它的抽象方法只能在自己的子类当中。而接口则不然,它能继承别的接口,也能被别接口继承,同时它能继承多个接口。
2、抽象类作为父类,它体现出一种模板化设计,实现部分的功能,其他的功能交给下面的子类来完成,
接口则体现出一种规范,对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务,对调用者而言,接口规定了,调用者可以调用那种服务,以及如何调用这些服务。
3、同时在设计上,从面向对象的角度来考虑,抽象类为了即可能的单纯,更多的是定义这个类与生俱来的特征或行为;而接口则更多的是提供某些可选特征或行为,而这些特征或行为还是不是这个类独有的。
以上为本人粗鄙之见!!!不定时修改,不定时更新