黑马程序员技术交流社区

标题: 关于多态中 转型的问题? [打印本页]

作者: Huberry    时间: 2014-8-13 21:34
标题: 关于多态中 转型的问题?
  1. 首先看一段代码,这段代码可以正常运行,但是后面改动一点就编译失败,求大神们解惑
复制代码
上面这段代码我把
Chinese c = (Chinese)p;  //使p向下转型为Chinese类型
if(p instanceof Person)   //此处有一个判
这两句顺序调换一下就编译失败了,提示是:
错误: 此处不允许使用变量声明
                          Chinese c = (Chinese)p;
                                        ^
为什么转型前加个判断语句就不能转了呢?

作者: Huberry    时间: 2014-8-13 21:38
  1. interface Person
  2. {
  3.         void eat();
  4. }
  5. class Chinese implements Person
  6. {
  7.     public void eat()
  8.     {
  9.                 System.out.println("吃饭");
  10.     }
  11.         public void show()//Chinese类的特性方法
  12.         {
  13.                 System.out.println("我是中国人");
  14.         }
  15. }
  16. class Show
  17. {  
  18.         public static void main(String[] args)
  19.         {
  20.                 Person p = new Chinese();
  21.                 p.eat();
  22.                
  23.                 Chinese c = (Chinese)p;//p向下转型
  24.                 if(p instanceof Person)//此处有一个判断       
  25.                 c.show();
  26.         }
  27. }
复制代码


额 ,上面代码没显示出来- -ll
作者: Huberry    时间: 2014-8-14 01:33
木有人么~~{:3_50:}
作者: cheye0207    时间: 2014-8-14 01:46
本帖最后由 cheye0207 于 2014-8-14 01:52 编辑

转换语句是在if语句里,也就是说c变量在if语句里创建的,在if语句外不能使用。。。用大括号把c.show()也括起来就好
作者: masai158    时间: 2014-8-14 07:16
  1.         public static void main(String[] args)
  2.         {
  3.             Person p = new Chinese();
  4.             p.eat();
  5.                
  6.                         Chinese c =null;

  7.             if(p instanceof Person)//此处有一个判断     
  8.                                 c = (Chinese)p;//p向下转型
  9.                                
  10.                         c.show();
  11.         }

  12. bu 知道你是不是这个意思
复制代码

作者: 嘿~~    时间: 2014-8-14 11:23
if(p instanceof Person)
下一步应该把p转成Person类型啊,跟chinese没关系啊,当然提示你不能声明变量了




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