继承
继承关系可以有效地在先前定义的某个类的基础上实现其定义的所有方法功能,并添加自己的独特方法功能。继承关系不仅能够体现复用的价值,还能够使设计思路变得清晰,逻辑结构更加鲜明。同时能够减少工作量,也更容易应对新的变化。
在继承时应遵循LSP原则,final定义的类无法派生出子类,且子类应比父类具有更强的规约、更强的不变量。子类型可以增加方法,但是不能删除。子类型需要实现抽象类型中的所有未实现方法。子类型中可以重写父类型中的方法,但是需要满足子类型方法的参数满足逆变、子类型方法的返回值满足协变且子类型不能抛出比父类型更多的异常。
逆变的过程是参数不便或变得越来越抽象的过程,如从String变为Object,但是目前java中遇到这种情况只能当做overload看待。