黑马程序员技术交流社区

标题: 多态的疑问 [打印本页]

作者: 贺利英    时间: 2014-1-16 20:45
标题: 多态的疑问
class Cat extends Animal
{
}

我想问的是 Animal a=new Cat ();这里面的a到底是什么类型的变量???
作者: 快乐的黑马    时间: 2014-1-16 20:53
这应该 是父类的引用,也就是说是Animal类型,它指向了子类的对象Cat。
作者: 够了没有    时间: 2014-1-16 20:59
Animal a=new Cat ();这里的a是Animal类型的变量。
因为这就行代码相当与把Cat类型提升了。
如果是这样的话:Cat c = (Cat) a;就是向下转型。
作者: 贺利英    时间: 2014-1-16 21:17
够了没有 发表于 2014-1-16 20:59
Animal a=new Cat ();这里的a是Animal类型的变量。
因为这就行代码相当与把Cat类型提升了。
如果是这样的话 ...

那这句话:a instanceof Cat   是true 还是 false   如果是true 那不就是代表a是Cat类  ??
作者: 够了没有    时间: 2014-1-16 21:34
贺利英 发表于 2014-1-16 21:17
那这句话:a instanceof Cat   是true 还是 false   如果是true 那不就是代表a是Cat类  ?? ...

嗯,如果是true的话a就是Cat类的实例对象,这是我理解范围内的回答,如果错了莫见怪哦
作者: xu6148152    时间: 2014-1-16 21:45
类类型变量,编译的时候是Animal类型,运行的时候是Cat类型。
作者: §傻、才乖    时间: 2014-1-16 21:53
这是多态,是父类引用指向子类对象,所以a   是Animal的类型

作者: 贺利英    时间: 2014-1-16 22:08
我反复看了一下视频 我觉得a虽然通过语句Animal a=new Cat ();变成了Animal,但是a至始至终实质类型都是Cat的,只是通过语句Animal a=new Cat ();a暂时变成了Animal类型的。所以语句 a instanceof Cat结果是true的。谢谢大家的回复,互相学习。
作者: 月生春    时间: 2014-1-16 22:12
是一个类类型变量
作者: november    时间: 2014-1-16 23:26
父类Animal 类型 父类引用指向子类对象, 这是多态的一种表现。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2