1、当涉及维护时为了复用而使用继承,结局并不完美
设计原则1:把会变化的取出并封装起来,好让其他部分不会受到影响(即不要和那些不需要变化的部分分离开来)
设计原则2:针对接口编程而不是针对实现编程
现在利用接口代表每个行为,而行为的每个实现都必须实现这些接口之一;这些接口的实现由专门的类实现,称之为行为类。由行为类实现行为接口,而不是由Duck类实现行为接口。
以往的做法是:行为是继承超类的具体实现而来,或是继承某个接口并由子类自行实现而来,这两种做法都是依赖于实现,导致被实现绑的死死的,没法更改行为。
归结为一句话就是:父类引用指向子类对象,即针对超类型编程
Animal animal = new Dog();
animal.makeSound(); //实质调用的是Dog()中具体实现的makeSound()方法