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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Huberry 中级黑马   /  2014-8-13 21:34  /  1732 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

点评

代码没显示出来  发表于 2014-8-13 21:35

6 个回复

倒序浏览
  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
回复 使用道具 举报
木有人么~~{:3_50:}
回复 使用道具 举报
本帖最后由 cheye0207 于 2014-8-14 01:52 编辑

转换语句是在if语句里,也就是说c变量在if语句里创建的,在if语句外不能使用。。。用大括号把c.show()也括起来就好
回复 使用道具 举报
  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 知道你是不是这个意思
复制代码
回复 使用道具 举报
if(p instanceof Person)
下一步应该把p转成Person类型啊,跟chinese没关系啊,当然提示你不能声明变量了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马