java 父类不能转为子类
package tao.test;class Base { public String str = "hello Base..."; public void hello(){ System.out.println(str); }}class Sub extends Base{ public String str = "hello Sub..."; public void hello(){ System.out.println(str); }}public class BaseSubTest{ public static void main(String[] args) { Base base = new Base(); base.hello(); // hello Base... System.out.println(base.str);// hello Base... Sub sub = new Sub(); // hello Sub... sub.hello(); // hello Sub... System.out.println(sub.str); Base bs = new Sub(); System.out.println(bs.getClass());//class tao.test.Sub bs.hello(); // hello Sub... System.out.println(bs.str); // hello Base... Sub s = (Sub) bs; s.hello(); // hello Sub... System.out.println(s.str); // hello Sub... //Sub sb = (Sub) new Base(); //System.out.println(sb.getClass()); // error //sb.hello(); error }}
Base bs = new Sub();
本人理解: new Sub(); 的过程中 先去执行sub的 父类的构造方法 , 再去执行sub的构造方法
所以可以这么转型
而 Sub sb = (Sub) new Base(); 仅仅执行sub的父类Base 的构造方法
所以。。。。。。。。。。。。。。
故而转型失败。。。。。。。
仅仅是揣测!!!