java中什么是匿名接口_Java中接口式的匿名內部類的構造方法

在使用多線程的時候,時常會使用兩種方式實現,一種是直接繼承Thread類來實現多線程,另外一種就是實現Runnable接口。

我們都知道,接口是沒有構造方法的,同時匿名內部類也是沒有構造方法的。原因有這幾點:1.接口只是一個聲明,需要有一個實現類實現這個接口。2.匿名內部類是匿名了,也就是說沒有類名,所以就沒有構造方法。

但是我們在new一個接口的時候常常會使用這種方式,就是用匿名內部類的方式去實現。

1 Runnable runnable=newRunnable() {2

3 @Override4 public voidrun() {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=newRunnable() {2

3 @Override4 public voidrun() {5 for(int i=0;i<50;i++){6 System.out.println(i);7 }8 }9

10 @Override11 publicString toString(){12 return "hello";13 }14

15 };

在這里使用了@Override注解證明了使用了Object法,另一個驗證就是運行程序會發現內有重寫方法的時候是類名和哈希值,改寫后輸出的是“Hello”。

那么我們就可以猜想,如果Runnable()調用了,是不是就證明了這時的Runnable向上轉型成了Object類型,那么這里實際上調用了Object類中的構造方法,為了驗證這一點我使用了IDEA的跟蹤代碼功能。發現使用super關鍵字的時候,代碼跟蹤到了Object方法,基本確定了這時調用了Object的構造方法。

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

aHR0cDovL3NlcnZpY2UudC5zaW5hLmNvbS5jbi93aWRnZXQvcW1kLzUwMzYxNzQyOTcvZDk2MTgzZDkvMTAucG5n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值