接口与抽象类各自的优缺:
接口缺点:如果向一个java接口加入一个新的方法时,所有实现这个接口的类都得编写具体的实现。
接口优点:一个类可以实现多个接口,接口可以让这个类不仅具有主类型的行为,而且具有其他的次要行为,比如 HashMap主要类型是Map,而Cloneable接口使它具有一个次要类型,这个类型说明它可以安全的克隆.
抽象类的缺点:一个类只能由一个超类继承,所以抽象类作为类型定义工具的效能大打折扣。
抽象类的优点:具体类可从抽象类自动得到这些方法的缺省实现。
抽象类与接口的区别:
1、抽象类可以包含部分方法的实现,这是抽象类优于接口的一个主要地方。
2、由于Java的单继承,每个类只能从一个抽象类继承,但是每个类可以实现多个接口,使用接口还可以实现Mixin混合类型的类。接口可以继承多个接口,即接口间可以多重继承。
3、将类抽取出通用部分作为接口容易,要作为抽象类则不太方便,因为这个类有可能已经继承自另一个类。
4、可以将接口和抽象类一起使用。在集合框架体系中,顶层接口Collection定义了一些方法,同时又提供了几个抽象类 AbstractCollection、AbstractList、AbstractMap实现了一些方法,这样具体的集合实现类可以选择从抽象类中继承或直接实现接口。