黑马程序员技术交流社区

标题: 关于instanceof的问题 [打印本页]

作者: 罗广伟    时间: 2013-1-20 08:21
标题: 关于instanceof的问题
本帖最后由 张向辉 于 2013-1-22 11:11 编辑

class Mao
{
        void mao()
        {
                System.out.println("mao");
        }
}

class Gou
{
        void gou()
        {
                System.out.println("gou");
        }
}
class demo
{
        public static void main(String[] args)
        {
                Mao m= new Mao();
                m.mao();
                Gou g= new Gou();
                g.gou();
                return(m instanceof Mao);
                }
}
抱着个错是什么原因




作者: 唐晓    时间: 2013-1-20 08:36
你如你想return,方法上必须加return的类型,而这个方法上的return类型是void,所以不能返回。而且一般主函数里不会写return,你这是要谁调用主函数啊?
作者: 柴乔军    时间: 2013-1-20 08:52
  1. class Mao
  2. {
  3.         void mao()
  4.         {
  5.                 System.out.println("mao");
  6.         }
  7. }

  8. class Gou
  9. {
  10.         void gou()
  11.         {
  12.                 System.out.println("gou");
  13.         }
  14. }
  15. class demo
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Mao m= new Mao();
  20.                 m.mao();
  21.                 Gou g= new Gou();
  22.                 g.gou();
  23.                 System.out.println(m instanceof Mao);//这里改成打印
  24.                 }
  25. }
复制代码
楼主是想打印结果看m是不是Mao类型吧?
作者: 罗广伟    时间: 2013-1-20 09:06
唐晓 发表于 2013-1-20 08:36
你如你想return,方法上必须加return的类型,而这个方法上的return类型是void,所以不能返回。而且一般主函 ...

//先谢谢了
class Mao
{
        void mao()
        {
                System.out.println("mao");
        }
}

class Gou
{
        boolean gou()
        {
               
                Mao m= new Mao();       
                if(m instanceof Mao)
                return true;
                else
                return false;
        }
}
class demo
{
        public static void main(String[] args)
        {
                Gou g= new Gou();
                g.gou();
               
       
        }
}
//那为啥我改成这样后运行结果为空呢,没返回真或者假
作者: 罗广伟    时间: 2013-1-20 09:19
柴乔军 发表于 2013-1-20 08:52
楼主是想打印结果看m是不是Mao类型吧?

这个行,我是想看看instanceof这个东西怎么用,如果改成System.out.println(g instanceof Mao);就会报错而不是返回false这是咋回事

作者: 柴乔军    时间: 2013-1-20 09:25
罗广伟 发表于 2013-1-20 09:19
这个行,我是想看看instanceof这个东西怎么用,如果改成System.out.println(g instanceof Mao);就会报错 ...
  1. mao
  2. gou
  3. true
复制代码
这是打印结果,没有错,返回的是true,你定义的m就是Mao的对象
作者: 柴乔军    时间: 2013-1-20 09:30
罗广伟 发表于 2013-1-20 09:06
//先谢谢了
class Mao
{

你给出的这个代码没有输出结果,并不是说返回的是空,加上输出语句就可以看到返回的结果
  1. class Mao
  2. {
  3.         void mao()
  4.         {
  5.                 System.out.println("mao");
  6.         }
  7. }

  8. class Gou
  9. {
  10.         boolean gou()
  11.         {
  12.                
  13.                 Mao m= new Mao();        
  14.                 if(m instanceof Mao)
  15.                 return true;
  16.                 else
  17.                 return false;
  18.         }
  19. }
  20. class demo
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 Gou g= new Gou();
  25.                 g.gou();
  26.                 System.out.println(g.gou());
  27.         
  28.         }
  29. }
复制代码

作者: 柴乔军    时间: 2013-1-20 09:32
罗广伟 发表于 2013-1-20 09:19
这个行,我是想看看instanceof这个东西怎么用,如果改成System.out.println(g instanceof Mao);就会报错 ...

这里你已经声明了Gou g = new Gou();所以再去和Mao比较直接是编译不过的
作者: 折纸时代    时间: 2013-1-20 09:47
因为,你是在主函数内return的, 主函数的返回值类型 是void, 所以会提示无法返回.  
帮你改了下代码:
  1. class Mao
  2. {
  3.          void mao()
  4.          {
  5.                  System.out.println("mao");
  6.          }
  7. }

  8. class Gou
  9. {
  10.          void gou()
  11.          {
  12.                  System.out.println("gou");
  13.          }
  14. }

  15. public  class Demo3
  16. {
  17.          public static void main(String[] args)
  18.          {
  19.                  Mao m= new Mao();
  20.                  m.mao();
  21.                  Gou g= new Gou();
  22.                  g.gou();
  23.                  System.out.println(m instanceof Mao);               
  24.                     //在主函数内无法return 具体类型值. 因为main方法 返回值是void
  25.                       //return(m instanceof Mao);
  26.                  }
  27. }
复制代码

作者: 罗广伟    时间: 2013-1-20 09:48
柴乔军 发表于 2013-1-20 09:32
这里你已经声明了Gou g = new Gou();所以再去和Mao比较直接是编译不过的

明白了,多谢




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