黑马程序员技术交流社区

标题: 关于多态转型 的小问题。求指教! [打印本页]

作者: ☆星痕泪    时间: 2013-9-24 20:38
标题: 关于多态转型 的小问题。求指教!
本帖最后由 ☆星痕泪 于 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, 下载次数: 17)

多态转型问题.png

作者: (0.0)’    时间: 2013-9-24 20:54
引用变量已经定义过了, 当然不可以再定义,当就像文件名不可以相同一样,不然操作会出现混乱。
到底要操作那个引用变量呢?引用在栈内存的main方法里面。
而对象才最内存中,且每个对象有自己的地址,所以匿名对象存储是有区别的
作者: ☆星痕泪    时间: 2013-9-24 20:57
(0.0)’ 发表于 2013-9-24 20:54
引用变量已经定义过了, 当然不可以再定义,当就像文件名不可以相同一样,不然操作会出现混乱。
到底要操作 ...

哦哦!!!!原来是这样,我说一天老报错,刚刚就是转不过弯来,好的 谢谢!{:soso_e113:}




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