LSP原则
我个人理解LSP原则的本质:所有能用父类的地方,他的子类都应该能用,由此衍生除了众多LSP的要求。我们需要先理解两个概念,逆变和协变
协变:更具体
逆变:更抽象
前置条件不能强化
后置条件不能弱化
参数类型要逆变
返回值类型要协变
子类型中不能抛出额外的异常(异常要协变)
泛型是否为子类型看尖括号前面的,而不是尖括号里面的
在java中无法实现逆变功能,所以逆变的操作由编译器通过重载来实现,要注意重载相应规则。
LSP原则
我个人理解LSP原则的本质:所有能用父类的地方,他的子类都应该能用,由此衍生除了众多LSP的要求。我们需要先理解两个概念,逆变和协变
协变:更具体
逆变:更抽象
前置条件不能强化
后置条件不能弱化
参数类型要逆变
返回值类型要协变
子类型中不能抛出额外的异常(异常要协变)
泛型是否为子类型看尖括号前面的,而不是尖括号里面的
在java中无法实现逆变功能,所以逆变的操作由编译器通过重载来实现,要注意重载相应规则。