2015-06-16 16 views
0

我有下面的類層次結構:Java的替代在子類空重寫的方法

BaseActivity

public abstract class BaseActivity extends AppCompatActivity { 
    protected abstract void bindView(); 
} 

ASubActivity

public class ASubActivity extends BaseActivity { 
    @Override 
    protected void bindView() { 
    //No implementation 
    } 
} 

BSubActivity

public class BSubActivity extends BaseActivity { 

    private Toolbar toolbar; 

    @Override 
    protected void bindView() { 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    } 

    ... 
} 

我覺得這有點難看。我寧願在ASubActivity中沒有bindView()方法。有沒有最佳實踐方法來做到這一點?

注意:BaseActity確實包含其他兩個子類使用的其他抽象方法。

回答

2

一種方法是把bindView()在接口而不是BaseActivity和只BSubActivity實現該接口:

public interface BindViewInterface{ 
    protected void bindView(); 
} 

那麼就沒有必要有bindView()BSubActivity

另一種方法是不使bindView()抽象方法:

public abstract class BaseActivity extends AppCompatActivity { 
    protected void bindView() {} 
} 
+0

我將使用第二個解決方案,謝謝! – Jdruwe

+0

不客氣! –

1

根據您的使用情況,你可以讓你的bindView() - 方法不是抽象:

public abstract class BaseActivity extends AppCompatActivity { 
    protected void bindView() { 
    } 
} 

在這種情況下,你不必重寫方法在ASubActivity。但是您可以覆蓋您的BSubActivity中的方法。

3

這是一個比android更具體的java問題。所有的抽象方法必須被執行,這會使代碼變得混亂。

唯一的另一種選擇是在父類中實現// do nothing版本(在您的情況下爲BaseActivity)。你不必抽象就只是因爲它在抽象類中什麼都不做。

public abstract class BaseActivity extends AppCompatActivity { 
    protected void bindView() {} 
} 

ASubActivity:

public class ASubActivity extends BaseActivity { 
    // Nothing to see here. 
}