1:“子类可以强转成父类”  ArrayList al = new ArrayList(), (List)al
2: "父类不能强转成子类"   Object o = new Object();  (List)o   这是错的
3: 父类强转成子类有两个情况下是可以的
   (1)父类指向子类引用   List l = new ArrayList();   (AarrayList)l
   (2) 父类是由子类强转成的    
          ArrayList l = new ArrayList;
         ArrayList con = new ArrayList;
         con.add(l); 
         (l)con.get(0);
         因为这里get到的object当初是由(object)l转成的,所以父类可以转子类所以我认为强转过程非常像是“职责隐藏”,比如用父类引用指向子类,就是“子类仅仅体现出父类特征,而将私有特征隐藏的过程”反过来则是释放。另外有人问这样的问题:子类继承父类,在事例化子类的时候,是不是也实例化了父类?如果没有事例化父类,又怎么可能用super来运行用父类中才有的代码呢?我也找不到很好的答案。

解决方案 »

  1.   

    子类继承父类,在事例化子类的时候,是不是也实例化了父类?如果没有事例化父类,又怎么可能用super来运行用父类中才有的代码呢?不是实例化父类,而是因为子类继承了父类中的field,从父类中继承的field要通过父类的构造方法来初始化,因为子类不知道父类的field如何初始化,更典型的情况是子类无法对父类中的private field进行直接操作,所以编译器强制子类的构造方法中调用父类的构造方法执行初始化工作。