情景,假如有一个动物animal类,那么猴子monkey自然是animal的子类,形成is-animal的关系,猴子会爬树,爬树是猴子拥有的方法,但如果想给猴子扩展其他功能,比如飞翔,游泳,这时可以通过接口去扩展其功能。
小结: 当子类继承了父类,就自动的拥有父类的功能
// 如果子类需要扩展功能,可以通过实现接口的方式扩展.
// 可以理解 实现接口 是 对 java 单继承机制的一种补充.
public class ExtendsVsInterface {
public static void main(String[] args) {
LittleMonkey wuKong = new LittleMonkey("悟空");
wuKong.climbing();
wuKong.swimming();
wuKong.flying();
}
}
//猴子
class Monkey {
public Monkey(String name) {
this.name = name;
}
public void climbing() {
System.out.println(name + " 会爬树...");
}
public String getName() {
return name;
}
}
//接口
interface Fishable {
void swimming();
}
interface Birdable {
void flying();
}
//继承
//小结: 当子类继承了父类,就自动的拥有父类的功能
// 如果子类需要扩展功能,可以通过实现接口的方式扩展. // 可以理解 实现接口 是 对 java 单继承机制的一种补充.
class LittleMonkey extends Monkey implements Fishable,Birdable {
public LittleMonkey(String name) {
super(name);
}
@Override
public void swimming() {
System.out.println(getName() + " 通过学习,可以像鱼儿一样游泳...");
}
@Override
public void flying() {
System.out.println(getName() + " 通过学习,可以像鸟儿一样飞翔...");
}
}
接口和继承解决的问题不同
1.继承的价值主要在于解决代码的复用性和可维护性的问题
2.接口的主要价值在于设计,设计好各种规范(方法),让其他类去实现这些方法,即更加的灵活。
接口比继承更加灵活
1.接口满足like-a(像什么)的关系,继承满足is-a(是什么)的关系。
2.接口在一定程度上解决了代码的解耦(接口规范性+动态绑定机制)