接口
接口是方法声明的集合
-
接口的三个关键点
- 接口代表能力
- 接口代表约定
- 接口代表角色
如果一个方法暂时无法给出实现 那么可以将其声明为抽象方法
抽象方法需要用abstract关键字修饰且没有方法体
如果一个类中有抽象方法(说明这个类不完整)那么必须被声明为抽象类
抽象类不能实例化(不能创建抽象类的对象)
抽象类是专门留给其他类去继承的类
抽象类和接口本身不能实例化 但是可以使用就地实例化的方式来创建对象
所谓就地实例化实际上是创建了匿名内部类(anonymous inner type)的对象接口之间可以继承的而且允许多重继承(一个接口继承多个接口)
Java8+ ---> Lambda表达式 ---> 匿名函数
- 仅限接口中只有一个方法且没有默认方法的时候
okButton.addActionListener(e ->{
changeBgColor();
});
类和类之间简单的说有三种关系:
- is-a - 继承 - 学生和人
- has-a关系 - 关联(聚合/合成) - 扑克和一张牌
- use-a关系 - 依赖 - 人和房子
类和它实现的接口之间的关系:
- play-a / like-a - 实现关系
重写(置换、覆盖、覆写): 父类有这个方法可能实现了可能没实现子类把父类的这个方法重新实现一次(给出自己的实现版本)
- 例子 : 儿子继承父亲,实现和尚,音乐家接口
package com.baidu.test;
import com.baidu.Daddy;
import com.baidu.Monk;
import com.baidu.Musician;
import com.baidu.Son;
// 接口的三个关键点
// - 接口代表能力
// - 接口代表约定
// - 接口代表角色
public class Test02 {
public static void main(String[] args) {
Son son = new Son("白玉龙儿子");
son.gamble();
son.smoke();
son.chant();
son.eatVegetable();
son.knockTheBell();
son.playPinao();
son.playViolin();
Daddy daddy = son;
daddy.gamble();
//让儿子扮演和尚的角色
Monk monk = son;
monk.chant();
monk.eatVegetable();
monk.knockTheBell();
Musician musician = son;
musician.playPinao();
musician.playViolin();
父亲类
package com.baidu;
public class Daddy {
protected String name;
public Daddy(String name){
this.name = name;
}
public void gamble(){
System.out.println(name + "正在赌博.");
}
}
和尚接口
package com.baidu;
//接口之间可以继承的而且允许多重继承(一个接口继承多个接口)
public interface Monk {
public default void chant(){
}
public default void eatVegetable(){
}
public default void knockTheBell(){
}
public default void practiceKongfu(){
}
}
音乐家接口
package com.baidu;
public interface Musician {
void playPinao();
void playViolin();
}