日期:2014-05-20  浏览次数:20789 次

关于匿名内部类不太理解
书上写的神神叨叨的实在不理解给了一段代码看也不是很明白
谁能帮我讲讲这段代码和匿名类
package shuzu;

interface A {
public void fun1();
}

class B {
  int i=10;
  public void get(A a)//声明了一个get方法,用于对A接口的实例化,并调用fun1()方法
  {
  a.fun1();
  }
  public void test()
  {
  this.get(new A()
  {
  public void fun1()
  {
  System.out.println(i);
  }
  }
  );
  }
}
public class niming {
public static void main(String[] args) {
B b=new B();
b.test();
}

}


------解决方案--------------------
/*
匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
3,匿名内部类的格式:  new 父类或者接口(){定义子类的内容}
4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。
5,匿名内部类中定义的方法最好不要超过3个。

*/
abstract class AbsDemo
{
abstract void show();
}

class Outer
{
int x = 3;

public void function()
{
AbsDemo d = new AbsDemo()
{
int num = 9;
void show()
{
System.out.println("num==="+num);
}
void abc()
{
System.out.println("haha");
}
};
d.show();
}
}

class InnerClassDemo
{
public static void main(String[] args) 
{
new Outer().function();
}
}


仅供参考
------解决方案--------------------
我的代码是用普通内部类实现的。楼主可以反复试试,就会有体会了。


interface A {
  public void fun1();
}

class B {
  int i=10;
  //----------------- 新建一个内部类,实现接口A
  //-----------------
  class RealA implements A
  {
     public void fun1()
     {
       System.out.println(i);
     }
  }
  //------------------ 
  public void get(A a)//声明了一个get方法, 需要一个实现了接口A的类的对象。
  {
    a.fun1();
  }
  public void test()
  {
    RealA ra=new RealA();//创建一个实现了接口A的对象。
    this.get(ra); //这块传进一个实现了接口A的对象。
  }
}
public class Niming {
  public static void main(String[] args) {
    B b=new B();
    b.test();
  }
}