Java替代子类中的空重写方法

时间:2015-06-16 10:14:16

标签: java android inheritance abstract-class

我有以下类层次结构:

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);
  }

  ...
}

我发现这有点难看。我宁愿在bindView()中没有ASubActivity方法。有最佳实践方法吗?

注意: BaseActity确实包含两个子类使用的其他一些抽象方法。

3 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分:2)

一种方法是将bindView()放入接口而不是BaseActivity,并且只有BSubActivity实现该接口:

public interface BindViewInterface{
    protected void bindView();
}

然后就不需要bindView() BSubActivity

另一种方法是不要使bindView()成为抽象方法:

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

答案 2 :(得分:1)

根据您的用例,您可以使bindView() - 方法不是抽象的:

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

在这种情况下,您不必覆盖ASubActivity中的方法。但您可以在BSubActivity

中覆盖该方法