1、什么是接口
1、一个抽象类中都是抽象方法,则可以将该抽象类定义成接口(访问权限控制符(public和friendly)interface 接口名)
接口内只能包含常量(public static final)、抽象方法及内部类
接口中的抽象方法的访问权限控制符只能是public,不能是其他
2、接口中的抽象方法必须通过一个类来实现
【实现类:一个实现了接口中抽象方法的类,因为Whale类实现了接口中抽象方法,所以Whale类即是实现类】
注意:
1、如果一个类实现了一个接口,但没有实现接口中的所有抽象方法,那么这个类必须是abstract类。
如果多个接口中定义了相同的抽象方法,则在实现类中只实现其中一个即可
2、接口中没有默认构造方法,而且也不能定义构造方法
3、接口一般以I开头
4、接口中的变量为public static final常量(即不能被重新赋值)
在JDK8及其以后版本的JDK中,接口内可以定义非抽象静态方法(static修饰的方法)与默认方法(default关键字修饰的方
法),该方法将由接口或实现类直接调用
【注意:接口中的静态方法不能被继承,默认方法可以被继承】
继承:Java类只有单继承;但是Java中接口可以多继承 ,通过extends关键字可以使自定义的接口实现继承,多继承时之间用逗号隔开,但需要注意: 接口只能继承父接口 ,不能继承抽象类或普通类
语法为【访问控制符 修饰符 class 类名 implements 接口1 [,接口2, ……]】
子接口可以实现父接口中的某些抽象方法(错),
含有抽象方法的抽象类必须至少有一个子类完全实现了其抽象方法 (对)
含有抽象方法的抽象类一定至少会有一个非抽象类(与接口的区别)
| 抽象类 | 接口 |
关键字 | abstract | Interface |
成员变量 | 可包含任意合法成员变量(包括各种访问级别的类成员变量和实例成员变量) | 只能包含公开静态常量(默认由public static final修饰) |
构造方法 | 有构造方法 | 无构造方法 |
方法 | 可包含任意合法方法(包括各种访问级别的非抽象类方法和非抽象实例方法,也包含除private外的非静态抽象方法) | JDK7及其以下版本JDK只能包含公开且抽象的方法(默认由public abstract修饰),而JDK8开始可以包含default、static修饰的非抽象方法。 |
如何实现抽象方法 | 通过自定义类继承抽象类的方式实现抽象类的抽象方法 | 通过自定义类implements接口实现接口中的抽象方法,定义类可以implements多个接口 |
是否存在多继承 | 一个抽象类只能继承一个抽象或非抽象类 | 一个接口可以继承多个接口 |