多态 --> 替换原则

替换原则:当一个软件实体可以使用某个类时,那么一定可以使用该类的子类,并且原代码并不会感觉父类与子类之间的差异。然而相反的替换却是不可以成功的。

如:一个经理一定是个雇员,而雇员不一定是经理。

编译器强制要求: 父类的对象变量可以引用该类的子类,而无法引用该类的父类。原因也如下代码:

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对象
    }
}
posted @ 2012-10-07 15:10  papertiger  阅读(195)  评论(0)    收藏  举报