接口(引用数据类型的一种)相关知识点:
一、接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。接口就是特殊类型的抽象类(可以这样理解)。
二、接口关键字:interface
接口定义:成员方法,全抽象,不能定义带有方法体的方法定义抽象方法
定义抽象方法格式:public abstract 返回值类型 方法名字(参数列表)
使用interface代替了原来的class,其他步骤与定义类相同:
(1)接口中的方法均为公共访问的抽象方法public,不可以用别的
(2)接口中无法定义普通的成员变量
三、类实现接口:使用implements
格式:注意:在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑
class 类 implements 接口 {
重写接口中的所有方法
}
四、接口中成员的特点(很重要)
1、接口中可定义变量,但必须有固定的修饰符,public static final 所以接口中的变量也称之为常量,其值不能改变。
2、接口中可以定义方法,方法也有固定的修饰符,public abstract
3、接口不可以创建对象。
4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。注意:方法要全部重写,如果子类只重写了一部分的抽象方法,还是一个抽象类。
五、接口的多实现
接口最重要的体现:解决多继承的弊端
怎么解决多继承的弊端呢?
弊端:多继承时,当多个父类中有相同功能时,子类调用会产生不确定性。
其实核心原因就是在于多继承父类中功能有主体,而导致调用运行时,不确定运行哪个主体内容。
为什么多实现能解决了呢?
因为接口中的功能都没有方法体,由子类来明确。
注意:如果两个接口的方法名相同但是返回值类型不同,类实现接口做不到,需要另寻他法!
六、类继承类实现接口
一个类继承了一个父类,还可以扩展额外的功能
例如:
class Fu {
public void show(){}
}
interface Inter {
pulbicabstract void show1();
}
class Zi extends Fu implements Inter {
public void show1 () {
}
}
七、接口的多继承
类与类——继承、类与接口——实现、接口和接口+继承(Java接口支持多继承)
代码:
public interface A{
public abstract void a();
}
public interface B{
public abstract void b();
}
public interface C extends A,B{
public abstract void c();
}
/*
*实现接口C,重写C接口的全部抽象方法,而且接口C继承了AB,D实现类,重写ABC三个接口全部抽象方法
/
public interface D implement C{
public abstract void a(){}
public abstract void b(){}
public abstract void c(){}
}
问题:Java中有多继承吗?
类和类中没有,接口和接口实现多继承
八、接口的思想
接口在开发中的好处:
1、接口的出现扩展了功能。
2、接口其实就是暴漏出来的规则。
3、接口的出现降低了耦合性,即设备与设备之间实现了解耦。
九、接口和抽象的区别(很重要)
相同点:
都位于继承的顶端,用于被其他类实现或继承;
都不能直接实例化对象;
都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
抽象类是这个事物中应该具备的内容, 继承体系是一种 is..a关系
接口是这个事物中的额外内容,继承体系是一种 like..a关系
二者的选用:
优先选用接口,尽量少用抽象类;
需要定义子类的行为,又要为子类提供共性功能时才选用抽象类