目录
第1章 接口1.1 接口概念接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。 请记住:一切事物均有功能,即一切事物均有接口。
1.2 接口的定义与定义类的class不同,接口定义时需要使用interface关键字。 可以将接口看做是一种只包含了功能声明的特殊类。
定义接口的格式: public interface 接口名 { 抽象方法1; 抽象方法2; 抽象方法3; }
* 接口定义: * 成员方法,全抽象 * 不能定义带有方法体的方法 * * 定义抽象方法: 固定格式(接口中的方法均为公共访问的抽象方法) * * public abstract 返回值类型 方法名字(参数列表); * 修饰符 public 写或者不写,都是public * * 接口中成员变量的定义:(接口中无法定义普通的成员变量) * 成员变量的定义,具体要求 * 要求 : 必须定义为常量 * 固定格式: * public static final 数据类型 变量名 = 值
public interface MyInterface { //public static final int a=1;//永远不可能被改变 //在接口中,定义抽象类的方法 public abstract void function(); //对于public,写或者不写都是public,公共权限 }
1.3 类实现接口定义类, 实现接口,重写接口中的抽象方法 创建实现类的对象,类实现接口, 可以理解为继承
格式: class 类 implements 接口 { 重写接口中的抽象方法 } * 类 实现 接口 * class MyInterfaceImpl implements MyInterface
在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。
1.4 接口中成员的特点* 1.成员变量的特点, 没有变量,都是常量 * 固定定义格式: public static final 数据类型 变量名 = 值 * public 权限 * static 可以被类名直接.调用 * final 最终,固定住变量的值 * * 注意:public static final 修饰符,在接口的定义中,可以省略不写 * 但是,不写不等于没有 * 三个修饰符,还可以选择性书写 * * 2.接口中的成员方法特点 * public abstract 返回值类型 方法名(参数列表) * 修饰符 public abstract 可以不写,选择性书写 * 但是,写不写都有 * * 3.实现类,实现接口,重写接口全部抽象方法,创建实现类对象 * 实现类,只重写了一部分抽象方法,那么这个实现类还是一个抽象类 * 子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。
1.5 接口的多实现接口最重要的体现:解决多继承的弊端。将多继承这种机制在java中通过多实现完成了。
弊端:多继承时,当多个父类中有相同功能时,子类调用会产生不确定性。 其实核心原因就是在于多继承父类中功能有主体,而导致调用运行时,不确定运行哪个主体内容。 为什么多实现能解决了呢? 因为接口中的功能都没有方法体,由子类来明确。
1.6 类继承类同时实现接口当一个类已经继承了一个父类,它又需要扩展额外的功能,这时就可以用到接口了。 接口的出现避免了单继承的局限性。父类中定义的事物的基本功能。接口中定义的事物的扩展功能。 class Zi extends Fu implements Inter { public void show1() { } }
1.7 接口的多继承类与类之间可以通过继承产生关系, 接口和类之间可以通过实现产生关系, 接口与接口可以使用extends进行继承。 interface Zi extends Fu1,Fu2,Fu3{ void show3(); }
* 实现接口Zi,重写Zi接口的全部抽象方法 * 而且接口Zi,继承Fu1,Fu2 * D实现类,重写Fu1,Fu2,Zi三接口全部抽象方法 * 可能出现在面试中会问: Java中有多继承吗 类没有多继承 接口之间多继承
1.8 接口的思想举例:我们都知道电脑上留有很多个插口,而这些插口可以插入相应的设备,这些设备为什么能插在上面呢?主要原因是这些设备在生产的时候符合了这个插口的使用规则,否则将无法插入接口中,更无法使用。发现这个插口的出现让我们使用更多的设备。
总结:接口在开发中的它好处
接口的出现方便后期使用和维护,一方是在使用接口(如电脑),一方在实现接口(插在插口上的设备)。例如:笔记本使用这个规则(接口),电脑外围设备实现这个规则(接口)。
1.9 接口和抽象的区别1、举例:(分析抽象类和接口的用法) 犬: 行为: 吼叫; 吃饭;
缉毒犬: 行为: 吼叫; 吃饭; 缉毒;
总结接口和抽象类的区别: 相同点: 都位于继承的顶端,用于被其他类实现或继承; 都不能直接实例化对象; 都包含抽象方法,其子类都必须覆写这些抽象方法; 区别: 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法; 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承) 抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系 接口是这个事物中的额外内容,继承体系是一种 like..a关系 例如: 抽象类:人: 吃饭 睡觉 接口:小偷: 吃饭 睡觉 偷东西(拓展)
二者的选用: 优先选用接口,尽量少用抽象类; 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;
|