对于Fu fu = new Zi();
我理解的编译看左边的意思是,当某个类中调用了fu.function3(),它编译时可以通过的。
运行看右边的意思是,当真正运行起这个类的实例时fu.function3(),它是会出错的。
这就是我的理解,不正确请指正。作者: 江夷 时间: 2014-6-11 21:09
这里的左边和右边,是指我们创建对象时,等号左边和等号右边代码。
eg:
Fu f = new Fu();// Fu f 父类引用 , new Fu(); 父类对象
Zi z = new Zi();// Zi z 子类引用 , new Zi(); 子类对象
Fu f = new Zi(); 父类引用指向子类对象。
如上例所示:
假如有Fu和Zi两个类,同时子类继承父类
Fu f = new Zi(); 对象在创建时,如Zi类拥有特有的方法则此时编译时无法通过的,因为父类引用指向了子类对象,在对象初始化时,子类有自己特有方法,父类没有改方法,父类的引用是无法实现的
此时如果想调用子类方法,则需要对父类对象进行向下转型,
Zi z = (Zi)f; 向下转型 后,父类对象被转成子类对象,转型后可以调用子类特有方法