Java 如何在继承类/接口时避免方法的常见重复?
假设我有一个类存储,它是一个由3个类(书籍、衣服、食品)组成的超类,现在我想在所有这些类中添加2个常用方法(描述和价格),只想在食品类中添加(计算税)方法。。。。 主课 创建超级引用数组,然后在每个引用上,我随机拥有不同的类对象,但我想要的是,我不想在Book和Cloth中使用(calculate tax)方法,我只想在Food引用(来自数组)中使用它 如何通过动态方法和接口实现这一目标Java 如何在继承类/接口时避免方法的常见重复?,java,arrays,inheritance,interface,multiple-inheritance,Java,Arrays,Inheritance,Interface,Multiple Inheritance,假设我有一个类存储,它是一个由3个类(书籍、衣服、食品)组成的超类,现在我想在所有这些类中添加2个常用方法(描述和价格),只想在食品类中添加(计算税)方法。。。。 主课 创建超级引用数组,然后在每个引用上,我随机拥有不同的类对象,但我想要的是,我不想在Book和Cloth中使用(calculate tax)方法,我只想在Food引用(来自数组)中使用它 如何通过动态方法和接口实现这一目标 非常感谢您可以在存储类中编写一个默认方法。如果它未被子类重写,则只有在调用时才会抛出错误 public in
非常感谢您可以在
存储
类中编写一个默认方法。如果它未被子类重写,则只有在调用时才会抛出错误
public interface Store {
default double calculateTax() {
throw new UnsupportedOperationException("Operation not defined for this store");
}
...
}
定义食品时
可以覆盖此方法:
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
,您的意思是您有三个类扩展了Store,对吗?商店不能扩展三个类。(听起来应该是StoreItem或类似的东西……书不是商店。)接下来,如果您通过商店参考调用CalculateAX
,如果它不是对食物对象的引用,你希望它做什么?哦,是的,我会更正它。我不想有任何其他方法,这对它本身来说是不必要的。书店和服装店仅仅报告他们收取零税有什么错?