首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于匿名内部类不太理解解决办法

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

关于匿名内部类不太理解
书上写的神神叨叨的实在不理解给了一段代码看也不是很明白
谁能帮我讲讲这段代码和匿名类
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();
  }
}

热点排行