如何在继承类/接口时避免常见的方法重复?

时间:2016-11-29 17:06:35

标签: java arrays inheritance interface multiple-inheritance

假设我有一个类Store,它是一个超级类的3个类(Book,Clothes,Food),现在我想在所有类中共同添加2个常用方法(Description和Price)并且只想添加(计算)食品类中的税收方法.... 在主类

创建超级引用数组,然后在每个引用上我随机拥有不同类的对象但是我想要的是我不想在书和衣服中有(计算税)方法,我只想在食物参考中(来自数组)。

如何通过动态方法调度和接口实现此目标?

非常感谢

1 个答案:

答案 0 :(得分:1)

您可以在Store课程中编写默认方法。如果它没有被子类重写,它将仅在被调用时抛出错误。

public interface Store {
    default double calculateTax() {
        throw new UnsupportedOperationException("Operation not defined for this store");
    }
    ...
}

定义Food时,您可以覆盖此方法:

public class Food implements Store {
    @Override
    public double calculateTax() {
        // calculate tax...
    }
    ...
} 

另一种选择是扩展Store接口以添加额外的方法

public interface Store { 
    ...
} 

public interface TaxedStore extends Store {
    double calculateTax();
    ...
}

现在,当您定义类Food这样的类时,您可以实现TaxedStore,当您定义类Book这样的类时,您可以实现Store