课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 使用匿名类的构造函数
  • 使用匿名类的构造函数

    发布:昆明Java培训      来源:达内新闻      时间:2016-09-30

  • 昆明Java培训机构的老师先代大家阅读如下代码,看上是否可以编译:

    public static void main(String[] args) {

    List list1=new ArrayList();

    List list2=new ArrayList(){};

    List list3=new ArrayList(){{}};

    System.out.println(list1.getClass() == list2.getClass());

    System.out.println(list2.getClass() == list3.getClass());

    System.out.println(list1.getClass() == list3.getClass());

    }

    注意ArrayList后面的不通点:list1变量后面什么都没有,list2后面有一对{},list3后面有两个嵌套的{},这段程序能否编译呢?若能编译,那输结果是什么呢?

    答案是能编译,输出的是3个false。list1很容易理解,就是生命了ArrayList的实例对象,那list2和list3代表的是什么呢?

    (1)、list2 = new ArrayList(){}:list2代表的是一个匿名类的声明和赋值,它定义了一个继承于ArrayList的匿名类,只是没有任何覆写的方法而已,其代码类似于:

    //定义一个继承ArrayList的内部类

    class Sub extends ArrayList {

    }

    //声明和赋值

    List list2 = new Sub();

    (2)、list3 = new ArrayList(){{}}:这个语句就有点奇怪了,带了两对{},我们分开解释就明白了,这也是一个匿名类的定义,它的代码类似于:

    //定义一个继承ArrayList的内部类

    class Sub extends ArrayList {

    {

    //初始化代码块

    }

    }

    //声明和赋值

    List list3 = new Sub();

    看到了吧,就是多了一个初始化块而已,起到构造函数的功能,我们知道一个类肯定有一个构造函数,而且构造函数的名称和类名相同,那问题来了:匿名类的构造函数是什么呢?它没有名字呀!很显然,初始化块就是它的构造函数。当然,一个类中的构造函数块可以是多个,也就是说会出现如下代码:

    List list4 = new ArrayList(){{} {} {} {} {}};

    上面的代码是正确无误,没有任何问题的,现在清楚了,匿名类虽然没有名字,但也是可以有构造函数的,它用构造函数块来代替构造函数,那上面的3个输出就很明显了:虽然父类相同,但是类还是不同的。

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:使用静态内部类提高封装性

下一篇:java培训:匿名类的构造函数很特殊

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56