强制继承类来定义方法

时间:2010-11-17 11:36:36

标签: java

超类是Account,我有两个子类 - CurrentAccount和SavingsAccount。

超类将有一个方法applyInterest(),它将使用继承类指定的速率计算兴趣。我不知道如何强制一个类来定义它。

我能想到的唯一选择是强制子类实现applyInterest(),并在那里设置速率。

3 个答案:

答案 0 :(得分:5)

我不确定我是否理解您的问题,但如果您不想引入abstract

,我认为您可以使用关键字interface
public abstract class Account
{
    public int applyInterest()
    {
        return 10 * getInterestRate();
    }
    abstract protected int getInterestRate();
}

public class CurrentAccount extends Account
{
    protected int getInterestRate() { return 2; }
}

public class SavingsAccount extends Account
{
    protected int getInterestRate() { return 3; }
}

import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class AccountTest
{
   @Test
   public void currentAccount()
   {
       Account ca = new CurrentAccount();
       assertTrue(ca.applyInterest()==20);
   }
   @Test
   public void savingsAccount()
   {   
       Account sa = new SavingsAccount();
       assertTrue(sa.applyInterest()==30);
   }
}

答案 1 :(得分:2)

如果可以的话,你可以强制子类实现getInterestRate()。

答案 2 :(得分:0)

最佳解决方案是将帐户类设为abstract。 如果您因任何原因不想这样做(那么,Account必须是可实例化的),您可以写:

applyInterest(){
throw new RuntimeException("Not yield implemented");//or another Exception: IllegalState, NoSuchMethodException, etc
}

真的,这不是世界上最好的主意(最好的想法是将Account作为抽象类),但是当你测试Account的子类并调用applyInterest()时,这个异常强迫你在子类中实现这个方法。

这只是另一种方式。