2015-05-30 181 views
2

線程的它混淆我爲什麼一個實現Runnable接口線程的子類不逼我重寫run方法。基本上,當我創建實現Runnable的簡單類時,它強制我重寫運行方法。但是,當我將普通類作爲線程的子類時,它不會強制我重寫該類。這背後的邏輯是什麼?子類實現Runnable接口

回答

2

當一個非抽象類聲明它實現了一個接口,這是什麼意思是,類必須有一個具體的實現每一個方法的接口定義了這些實現方法,但是這些實現方法並不一定要在類中明確,它們可以從超類繼承。在這個具體的例子java.lang.Thread有自己的public void run(),其中類繼承,所以實現Runnable並不需要添加自己的覆蓋,以滿足編譯器(雖然它可能不會真正有用)螺紋的子類。

+0

這是否意味着,如果我有一個具有相同名稱的方法與方法的接口有,即時通訊將在我的簡單的類來實現超,編譯器不會警告我? –

+1

@ReubenJaMesAveñoGruta比相同_name_稍多,超類方法必須是與接口兼容的,所以相同的名字,以相同的順序相同的參數類型和相同的返回類型(或子類型 - 如果接口方法返回'對象「,那麼使用返回'String'的方法來實現它是有效的)。 –

2

這是因爲主題本身實現的run()。

@Override 
public void run() { 
    if (target != null) { 
     target.run(); 
    } 
} 

默認情況下,它什麼都不做。如果我們延長一個主題,我們實現此方法,以便它有用的東西

+0

這基本上意味着,我已經通過擴展Thread類來重寫它了嗎?它不只是默認顯示。 –

+0

可以擴展線程,但沒有它並不意味着你已經重寫run()的 –