zoukankan      html  css  js  c++  java
  • Java中接口式的匿名内部类的构造方法

    在使用多线程的时候,时常会使用两种方式实现,一种是直接继承Thread类来实现多线程,另外一种就是实现Runnable接口。

    我们都知道,接口是没有构造方法的,同时匿名内部类也是没有构造方法的。原因有这几点:1.接口只是一个声明,需要有一个实现类实现这个接口。2.匿名内部类是匿名了,也就是说没有类名,所以就没有构造方法。

    但是我们在new一个接口的时候常常会使用这种方式,就是用匿名内部类的方式去实现。

     1  Runnable runnable=new Runnable() {
     2             
     3             @Override
     4             public void run() {
     5                 for(int i=0;i<50;i++){
     6                     System.out.println(i);
     7                 }
     8             }
     9             
    10         };

    在这里有一个new Runable(){},就是这里的Runnable(),这不就是构造方法吗?怎么会出现一个构造方法?

    这时候突然想到一点就是Java所有的类都会默认继承一个Object类,而接口也是一个类,匿名内部类也是一个类,所以我就想是不是这里继承了Object,之后我在代码中加入了toString方法来确定是否含有Object类的内容。

     1 Runnable runnable=new Runnable() {
     2 
     3             @Override
     4             public void run() {
     5                 for(int i=0;i<50;i++){
     6                     System.out.println(i);
     7                 }
     8             }
     9             
    10             @Override
    11             public String toString(){
    12                 return "hello";
    13             }
    14 
    15         };

    在这里使用了@Override注解证明了使用了Object法,另一个验证就是运行程序会发现内有重写方法的时候是类名和哈希值,改写后输出的是“Hello”。

    那么我们就可以猜想,如果Runnable()调用了,是不是就证明了这时的Runnable向上转型成了Object类型,那么这里实际上调用了Object类中的构造方法,为了验证这一点我使用了IDEA的跟踪代码功能。发现使用super关键字的时候,代码跟踪到了Object方法,基本确定了这时调用了Object的构造方法。

    =========================================

  • 相关阅读:
    最全的ASP.NET开源CMS汇总
    excel学习range
    多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
    EXCEL之Range,cells,offset,end用法
    天佑中华
    敏捷测试感悟(之二)
    4月份到上海出差
    《Google API大全:编程·开发·实例》一书将在本周末的GDD(Google开发者大会)上首发
    敏捷测试感悟(之一)
    拿到了TD的3G测试手机
  • 原文地址:https://www.cnblogs.com/Summer7C/p/5245368.html
Copyright © 2011-2022 走看看