回 帖 发 新 帖 刷新版面

主题:定义在if语句中的内部类和定义在代码块{}中的内部类区别

今天做《Think in JAVA》题时遇到了一些令我一解的事,想了很久,还是有点不明白。现在把代码贴出来希望哪位大虾能指点一、两。  
这段代码是内部类定义在if语句块中,是不是定义在if语句块中之后,他就不能够用Return语句来返回内部类了吗?
package test14;

interface Instrument{
  void fun();
}

public class Test14{
    boolean flag;
    Test14(boolean b){
      flag=b;
    }
  public Instrument getInterface(){ 
       if(flag){
        class Inner implements Instrument{
          public void fun(){
             System.out.println("This is Inner fun");
          }
         }
         //Instrument i=new Inner();
         //i.fun();
         return new Inner(); //======这样子去返回会出现异常========
     }
  }
 public static void main(String[] args){
       boolean flag=true;
    new Test14(flag).getInterface();
  }
}
异常显示: 
 Test14.java:16: cannot resolve symbol  
  symbol  : class Inner  
  location: class test14.Test14  
  return new Inner(); 

这段代码是内部类定义在语句块{}中,但他能够用Return语句来返回内部类 
package test14_1;

interface Instrument{
  void fun();
}

public class Test14_1{
  public Instrument getInterface(){
      {
        class Inner implements Instrument{
          public void fun(){
             System.out.println("This is Inner fun");
          }
         } 
      return new Inner();//====这里用Return语句就能返回了。
    }
   
  }
 public static void main(String[] args){
       Instrument i=new Test14_1().getInterface();
       i.fun();
  }
}

想了很久还是不明白if语句内定义内部类和代码块(不知道{}是不是读代码块)中定义到底有什么区别

回复列表 (共2个回复)

沙发

public void fun(){
             System.out.println("This is Inner fun");
          }
       
         //Instrument i=new Inner();
         //i.fun();
         return new Inner(); //======这样子去返回会出现异常========
     }
 你一个代码块,返回一人对象,把引用返给了谁啊?

板凳


谢谢,我明白了,呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册