众所周知,一个Java类只能extends一个类,但可以implements多个接口。
那么什么时候用继承,什么时候用实现接口呢?
继承关系表明了两个类之间的抽象联系;
而接口更像是插件,与实现类并没有抽象联系。
举个例子
public class Animal {
public void run() {
System.out.println("Animal can run.");
}
}
public interface Flyable {
void fly();
}
public class Pig extends Animal implements Flyable{
@Override
public void fly() {
System.out.println("Aah, pig can fly!");
}
@Override
public void run() {
// super.run();
System.out.println("Pig can run.");
}
}
以上是两个类和一个接口,显然Animal和Pig是存在抽象联系的,Pig是Animal的子类。所以是Pig extends Animal。
众所周知,猪是不会飞的(飞猪除外),所以Pig类中不会存在fly行为。如果有种基因突变的猪会飞了怎么办呢?这个时候可以为猪添加一个飞行插件,通过implements Flyable接口使猪获得飞行的能力。