A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 刘晓 中级黑马   /  2013-6-8 18:28  /  1614 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘晓 于 2013-6-8 21:17 编辑

Animal a= new Cat( );
Cat c=(Cat) a;//强制将父类的引用转换为子类类型。
其中Cat是Animal的子类,我想问的是 a是不是Cat类的对象?
如果不是,那毕老师的视频里为何在没有强制转换父类引用的时候写 a.猫的方法

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 刘海芳 于 2013-6-8 18:51 编辑

无需强制,java的多态会使c向下转型为cat,即c就是cat的对象,可以用instanceof关键字来测试,instanceof是用来判断某个对象是否属于某个类
  1. public class Cat extends Animal{
  2.         public static void main(String[] args) {
  3.                 Animal a=new Cat();
  4.                 //instanceof是用来判断某个对象是否属于某个类
  5.                 System.out.println(a instanceof Cat);
  6.                 //output:true
  7.         }
  8. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
创建对象时,a对象是 上转型对象,也就是说猫是动物成立,但说动物是猫不成立。当猫是动物上转型时,猫失去了自有的方法,但Animal方法是能调用的,这时候的a就是Animal ,当你运行时,会把a绑到Cat身上,叫运行时多态。希望对你的疑惑有帮助

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
先给说说这两句话什么意思:
Animal a= new Cat( ); // 类型提升,向上转型(Cat类型自动提升为了Animal型)
Cat c=(Cat) a; // 强制将父类引用转换成了子类类型,向下转型,这里的a是Animal类型,然后(Cat)a,转换为子类类型
所以就可以a.猫的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马