接口和抽象类这两种机制之间的区别:
1、抽象类允许包含某些方法的实现,但是接口不允许。
2、为了实现由抽象类定义的类型,类必须成为抽象类的一个子类。
java只允许单继承,所以抽象作为类型定义受到了极大的极限。
接口允许我们构造非层次结构的类型框架
类型层次对于组织某些事物是非常适合的,但是其他有些事物并不能被组织成一个严格的层次结构。例如:假设我们有一个接口代表一个singer(歌曲家)另一个接口代表songwriter(作曲家)
在现实生活中,有些歌曲家本身就是作曲家,因为我们使用了接口而不是抽象类定义了这些类型,所以对于单个类而言,它同时实现Singer和SongWirter是完全允许的。实际上我们可以定义第三个接口,它同时扩展了Singer和SongWirter,并添加一些适合这些组合的新方法:
一旦你这么做了,接口就可以成为救世主,能帮助你解决大问题。另一种做法是编写一个臃肿的类层次,就会出现“组合大爆炸”
1、抽象类允许包含某些方法的实现,但是接口不允许。
2、为了实现由抽象类定义的类型,类必须成为抽象类的一个子类。
java只允许单继承,所以抽象作为类型定义受到了极大的极限。
接口允许我们构造非层次结构的类型框架
类型层次对于组织某些事物是非常适合的,但是其他有些事物并不能被组织成一个严格的层次结构。例如:假设我们有一个接口代表一个singer(歌曲家)另一个接口代表songwriter(作曲家)
public interface Singer{
AudioClip sing(Song s);
}
public interface SongWiriter{
Song compose(boolean hit);
}
在现实生活中,有些歌曲家本身就是作曲家,因为我们使用了接口而不是抽象类定义了这些类型,所以对于单个类而言,它同时实现Singer和SongWirter是完全允许的。实际上我们可以定义第三个接口,它同时扩展了Singer和SongWirter,并添加一些适合这些组合的新方法:
public interface SingerSongWirter extends Singer,SongWriter{
AudioClip strum();
void actSensitive();
}
一旦你这么做了,接口就可以成为救世主,能帮助你解决大问题。另一种做法是编写一个臃肿的类层次,就会出现“组合大爆炸”