A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙政 中级黑马   /  2013-5-4 19:04  /  1918 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙政 于 2013-5-6 08:33 编辑

java匿名内部类是如何进行初始化的,希望能给代码解析?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览
Weekday weekday1=new Weekday()
{
};
回复 使用道具 举报
这就是一个匿名内部类呀
回复 使用道具 举报
个人理解,不对的地方希望大家指正
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方法。


回复 使用道具 举报
匿名内部类一定是某一个类的子类(这个类可以是抽象类,也可以不是抽象类)或是实现某个接口。因此匿名内部类的方法一般都是实现某个类或接口的空方法,但也有可能是覆盖某个类的方法。使用匿名类可以最大限度的减小匿名类的访问权限,同时使整个代码看起来比较紧凑
回复 使用道具 举报
署名内部类就是不需要知道它的名字只需要它来实现代码块。常用在子类覆盖父类的方法上。
举一个简单的例子:
new Thread(new Runnable(){
    public void run(){
          ....代码块
  }
})这里新建了一个Thread类,但是不需知道它的名字,只需要运行它run()里面的方法,
这个就是署名内部类,内部类是新创建了一个Runnable类,但是没有名字,所以就是
署名内部类。(个人理解)
回复 使用道具 举报
本帖最后由 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
回复 使用道具 举报
谢谢大家的解答,让我明白了不少!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马