package C_Java_SE.day03.InnerClass;public class AnnInnerClassDemo 
{
public static void main(String[] args) 
{
final int a=5;
Outer oo=new Outer()
{
int b=4;
public String toString()
{
return "匿名内部类!";
}
public int hashCode()
{
return a*1000+b;
}
public int add()
{
return a+b;
}
};
System.out.println(oo);
System.out.println(oo.hashCode());
System.out.println(oo.add());//编译错误
}
}
class Outer
{}
为什么最后一行输出会报错?
匿名内部类不能自己定义方法吗?

解决方案 »

  1.   

    LZ定义匿名内部类 就是Outer的子类为什么最后一行输出会报错? //因为Outer类没有add方法
    匿名内部类不能自己定义方法吗?//可以,通过反射来访问。
      

  2.   

    哎好晕。
    首先,楼主这个根本不叫匿名内部类,匿名内部类是不会出现类名称的,即没有声名类名那部分,
    只会出现new Outer()
    另外,既然是匿名内部类,所以只会使用一次,匿名内部类外部怎么可能会调用到匿名内部类内部的方法。

    没办法说了,楼主看下书吧,基础没有搞明白前不要急着问问题
      

  3.   

    匿名内部类是产生一个子类继承父类。父类没有该方法,所以用不了多态。你可以
    interface Outer{
       int add();
    }
    or
    abstract class Outer{
       abstract int add();
    }
    or
    class Outer{
       public int add(){
            return 0;
    }
    }
      

  4.   

    匿名内部类是继承 父类的方法 
    父类没有add()方法 故报错
    父类默认有toString() 和hashCode() 所以前面的不报错