抽象类和接口类,一个是用来继承一个是用来实施
只要有一个抽象方法的类就可以是抽象类,除了抽象方法,抽象类可以有具体的代码等待着子类的继承和复用
而java 中继承只能单继承,所以一个类一次只能继承一个抽象类,但是一各个类可以实施多个接口
然后具体不同的应用在于策略模式:
举个鸭子类的例子,鸭子类有可能会有quack(), swim(),display()方法,然后display()设置成抽象类,因为每个鸭子的display的方法不一样,当需求改了,要所有的鸭子能飞,只需在父类duck中加入fly方法就可以了,但是如果后面的需求又变了,有些鸭子是不会飞的,我们就需要把鸭子会飞的behavior设置成一个额外的flybehavior的接口,同样quack()这个方法也有可能不能被统一,后面加进来的鸭子叫法都不同,于是我们就可以将quack()这个方法设置出来,单独设置成一个接口,被其他的鸭子去implements,这样弹性就增加了,但是我们要同时兼收继承的代码的复用性,我们可以给鸭子的flybehavior的接口写一些具体类,然后再Duck中持有flybehavior的引用,当具体的鸭子类来,用setFlybehavior将具体的对象出入就可以了 |