Java程序设计语言提供了接口和抽象类两种机制来定义允多个实现的类型。这两种机制的主要区别有
1)抽象类允许包含某些方法的实现,但是接口则不允许。
2)为了实现由抽象类定义的类型,类必须成为抽象类的一个子类。
3)因为Java只允许单继承,所以抽象类作为类型定义受到了极大的限制,但是一个类可以实现多个接口。
现有类可以很容易被更新,以实现新的接口。一般来说无法更新现有的类来扩展新的抽象类,如果希望两个类扩展同一个抽象类,就必须把抽象类放到类型层次的高处,以便这两个类的一个祖先成为他的子类,遗憾的是这样会伤害到类层次,迫使这个公共祖先的所有后代类都扩展这个新的抽象类,无论它对于这些后代类是否合适
接口是定义mixin(混合类型)的理想选择
接口的优点:
首先,一个类可以创建多个接口,所以一个类可以成为多个类型。
其次,接口也可以表示为可选择的行为。也就是说如果我不需要我就不使用接口。
抽象类的缺点:
抽象类:无法拥有可选择的行为
接口允许我们构造非层次结构的类型框架。类型层次对于组织某些事物是非常合适的,但是其他有些事物并不能被整齐的组织成一个严格的层次结构。举个例子 比如说:有歌唱家、演员两个接口。
public interface Singer{
void sing();
}
public interface Actor{
void act();
}
但是一个人既可以是歌唱家也可以是演员
public class Person implements Singer,Actor{
public void sing(){//};
public void act(){};
}
你并不总是需要这样的灵活性,但是一旦你需要的时候,接口可就成了救世主**
抽象类结合接口实现骨架实现(一般被称为AbstractInterface Interface表示接口)
比如:AbstratMap、AbstartList等等。举个例子:
public interface Cook{
void add();
void type();
void cook();
}
public abstract AbstractCook implements Cook {
abstract void add();
abstract void type();
public void cook(){
//...根据上诉方法,制作具体类型的菜
}
网友评论