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的構造方法。

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM