替换原则:当一个软件实体可以使用某个类时,那么一定可以使用该类的子类,并且原代码并不会感觉父类与子类之间的差异。然而相反的替换却是不可以成功的。
如:一个经理一定是个雇员,而雇员不一定是经理。
编译器强制要求: 父类的对象变量可以引用该类的子类,而无法引用该类的父类。原因也如下代码:
public class Employee{} public class Manager{ public void setBonus(double bonus){ this.bonus = bonus; } private double bonus; } public class TypeConversionTest{ public static void main(String[] args){ Manager manager = new Employee(); //假设合法的话. manager.setBonus(1.0); //用户必然会使用该方法.那么在一个没有该方法的对象上面应用方法必然导致错误 } }
可以轻松的逃脱Java编译器的约束,对我们的编程要求就更高了.
public class ArrayTypeConversion{ public static void main(String[] args){ Employee employees[] = new Employee[2]; Manager managers[] = new Manager[2]; employees = managers; emplyees[0] = new Employee(); managers[0].setBonus(1.0);//会报出异常ArrayStoreException.因为我们尝试在Employee对象上面调用Manager对象的方法。原因很简单,引用指向的都是Emplyee对象 } }