黑马程序员技术交流社区

标题: java匿名内部类的问题 [打印本页]

作者: 孙政    时间: 2013-5-4 19:04
标题: java匿名内部类的问题
本帖最后由 孙政 于 2013-5-6 08:33 编辑

java匿名内部类是如何进行初始化的,希望能给代码解析?
作者: aijava11    时间: 2013-5-4 19:06
Weekday weekday1=new Weekday()
{
};
作者: aijava11    时间: 2013-5-4 19:08
这就是一个匿名内部类呀
作者: 罗广伟    时间: 2013-5-5 09:57
个人理解,不对的地方希望大家指正
class A
{
    void show()
    {
           System.out.println("A");
    }
}
class Out
{
      public void function()
      {
           new A()
           {
                   void show()
               {
                           System.out.println("匿名内部类");
               }
           }.show();
       }
}
class Test
{
        public static void main(String[] args)
        {
                new Out().function();
        }
}
1、Test类加载,主函数加载;
2、Out类加载,在堆内存开辟空间分配内存地址;
3、调用function方法;
4、类A加载,在堆内存开辟空间;
5、匿名内部类加载,在堆内存开辟空间;
6、覆写show方法,匿名内部类调用覆写后的show方法。



作者: 余雷    时间: 2013-5-5 10:15
匿名内部类一定是某一个类的子类(这个类可以是抽象类,也可以不是抽象类)或是实现某个接口。因此匿名内部类的方法一般都是实现某个类或接口的空方法,但也有可能是覆盖某个类的方法。使用匿名类可以最大限度的减小匿名类的访问权限,同时使整个代码看起来比较紧凑
作者: yan5108652    时间: 2013-5-5 14:28
署名内部类就是不需要知道它的名字只需要它来实现代码块。常用在子类覆盖父类的方法上。
举一个简单的例子:
new Thread(new Runnable(){
    public void run(){
          ....代码块
  }
})这里新建了一个Thread类,但是不需知道它的名字,只需要运行它run()里面的方法,
这个就是署名内部类,内部类是新创建了一个Runnable类,但是没有名字,所以就是
署名内部类。(个人理解)
作者: yedong07a    时间: 2013-5-5 21:29
本帖最后由 yedong07a 于 2013-5-5 21:30 编辑

抽象类WeekDay1定义一个WeekDay1类型的抽象方法nextDay(),
定义WeekDay1类型的常量SUN,匿名内部类:
public final static WeekDay1 SUN = new WeekDay1() {
        @Override
        public WeekDay1 nextDay() {
                return MON;
        }
};
编译通过可以在bin目录找到WeekDay1$1.class
作者: 孙政    时间: 2013-5-6 08:32
谢谢大家的解答,让我明白了不少!




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