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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ☆星痕泪 高级黑马   /  2013-9-24 20:38  /  1024 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ☆星痕泪 于 2013-9-24 20:58 编辑

  1. class DuoTaiDemo1
  2. {
  3. public static void main(String[] args)
  4. {
  5. Animal a = new Cat();
  6. Animal a = new Dog();
  7. //function(new Cat());
  8. //function(new Dog());

  9. }
  10. public static void function(Animal a)//封装调用的方法
  11. {
  12. a.eat();
  13. a.sleep();//这里不能放在if和else if之间,否则会报错
  14. if(a instanceof Cat)//进行判断
  15. {
  16. Cat c = (Cat)a;//强制向下转型
  17. c.run();
  18. //a.run();这个是不行的,因为引用a为父类引用
  19. }
  20. //a.sleep();这里不能放在if和else if之间,否则会报错
  21. else if(a instanceof Dog)
  22. {
  23. Dog d = (Dog)a;
  24. d.kanJia();
  25. }
  26. }
  27. }
复制代码
问题就是图片中的为什么建立调用匿名对象的方法和建立子类对象的引用结果不同呢?

多态转型问题.png (16.96 KB, 下载次数: 3)

多态转型问题.png

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
引用变量已经定义过了, 当然不可以再定义,当就像文件名不可以相同一样,不然操作会出现混乱。
到底要操作那个引用变量呢?引用在栈内存的main方法里面。
而对象才最内存中,且每个对象有自己的地址,所以匿名对象存储是有区别的

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
(0.0)’ 发表于 2013-9-24 20:54
引用变量已经定义过了, 当然不可以再定义,当就像文件名不可以相同一样,不然操作会出现混乱。
到底要操作 ...

哦哦!!!!原来是这样,我说一天老报错,刚刚就是转不过弯来,好的 谢谢!{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马