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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贺利英 中级黑马   /  2014-1-16 20:45  /  1301 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Cat extends Animal
{
}

我想问的是 Animal a=new Cat ();这里面的a到底是什么类型的变量???

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

9 个回复

倒序浏览
这应该 是父类的引用,也就是说是Animal类型,它指向了子类的对象Cat。

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
Animal a=new Cat ();这里的a是Animal类型的变量。
因为这就行代码相当与把Cat类型提升了。
如果是这样的话:Cat c = (Cat) a;就是向下转型。

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
够了没有 发表于 2014-1-16 20:59
Animal a=new Cat ();这里的a是Animal类型的变量。
因为这就行代码相当与把Cat类型提升了。
如果是这样的话 ...

那这句话:a instanceof Cat   是true 还是 false   如果是true 那不就是代表a是Cat类  ??
回复 使用道具 举报
贺利英 发表于 2014-1-16 21:17
那这句话:a instanceof Cat   是true 还是 false   如果是true 那不就是代表a是Cat类  ?? ...

嗯,如果是true的话a就是Cat类的实例对象,这是我理解范围内的回答,如果错了莫见怪哦
回复 使用道具 举报
类类型变量,编译的时候是Animal类型,运行的时候是Cat类型。

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
这是多态,是父类引用指向子类对象,所以a   是Animal的类型

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
我反复看了一下视频 我觉得a虽然通过语句Animal a=new Cat ();变成了Animal,但是a至始至终实质类型都是Cat的,只是通过语句Animal a=new Cat ();a暂时变成了Animal类型的。所以语句 a instanceof Cat结果是true的。谢谢大家的回复,互相学习。

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
是一个类类型变量
回复 使用道具 举报
父类Animal 类型 父类引用指向子类对象, 这是多态的一种表现。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马