请问:
这是think in java上的:
动态绑定 它的含义就是在运行是根据对象的类型进行绑定 也就是说 编译器一直不知道对象的类型 我的疑问:
如果编译器将子类和基类当成同一种类型 那么我将基类对象赋给子类引用的时候为什么不可以呢 这说明编译器在编译期可以判断出基类和子类是不同的类型啊 谢谢

解决方案 »

  1.   

    class SuperClass {}
    class SubClass extends SuperClass {}public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
                    // 1.
    SubClass sub = new SubClass();
    SuperClass sup = sub;
    SubClass sub2 = (SubClass)sup; // 没问题

                    // 2.
    SuperClass sup2 = new SuperClass();
    SubClass sub3 = (SubClass)sup2; // 语法上没错, 但是逻辑上有问题, 类型转换发生异常
    }
    }父类对象不能直接赋值给子类对象.
    如果一个对象是子类对象, 先赋值给父类对象, 再由这个父类对象赋值给子类对象, 这时没有任何问题.
      

  2.   

    运行时对象的类型 编译器可以知道 
    假定动物类  狗类继承动物类
    动物类 a ;
    狗类 b = new 狗类
    a = (动物类)b;//可以 狗是一种动物 狗具有动物的特征
    狗类  b;
    动物类 a = new 动物类
    b = (狗类)a;//不可以 动物不是一种狗 动物类不包括狗类特有的特征你可以说 
    狗是一种动物
    而不能说 动物是一种狗
      

  3.   

    楼主不看看书中前面提到的
    is-a  has-a