Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在继承类/接口时避免方法的常见重复?_Java_Arrays_Inheritance_Interface_Multiple Inheritance - Fatal编程技术网

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

Java 如何在继承类/接口时避免方法的常见重复?,java,arrays,inheritance,interface,multiple-inheritance,Java,Arrays,Inheritance,Interface,Multiple Inheritance,假设我有一个类存储,它是一个由3个类(书籍、衣服、食品)组成的超类,现在我想在所有这些类中添加2个常用方法(描述和价格),只想在食品类中添加(计算税)方法。。。。 主课 创建超级引用数组,然后在每个引用上,我随机拥有不同的类对象,但我想要的是,我不想在Book和Cloth中使用(calculate tax)方法,我只想在Food引用(来自数组)中使用它 如何通过动态方法和接口实现这一目标 非常感谢您可以在存储类中编写一个默认方法。如果它未被子类重写,则只有在调用时才会抛出错误 public in

假设我有一个类存储,它是一个由3个类(书籍、衣服、食品)组成的超类,现在我想在所有这些类中添加2个常用方法(描述和价格),只想在食品类中添加(计算税)方法。。。。 主课

创建超级引用数组,然后在每个引用上,我随机拥有不同的类对象,但我想要的是,我不想在Book和Cloth中使用(calculate tax)方法,我只想在Food引用(来自数组)中使用它

如何通过动态方法和接口实现这一目标


非常感谢

您可以在
存储
类中编写一个默认方法。如果它未被子类重写,则只有在调用时才会抛出错误

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
,如果它不是对食物对象的引用,你希望它做什么?哦,是的,我会更正它。我不想有任何其他方法,这对它本身来说是不必要的。书店和服装店仅仅报告他们收取零税有什么错?