【发布时间】:2017-02-21 18:51:07
【问题描述】:
我有一个关于方法覆盖的问题,它可能受到其他方面的影响,所以我希望这个问题足够具体。 上下文:我尝试为某些对象的价格构建一个简单的计算器,但“价格种类”应与其余逻辑分离,以便客户端只需要知道以下接口。
我认为最好用我的问题开始的基本代码来解释。
public interface InterfacePrice {
public InterfacePrice addPrices(InterfacePrice price1, InterfacePrice price2);
public InterfacePrice subtractPrices(InterfacePrice price1, InterfacePrice price2);
public String priceToString();
}
所以这就是我应该能够用两个价格做的事情。 现在我试着再详细说明一下:
public class BnSPrice implements InterfacePrice {
int gold = 0;
int silver = 0;
int copper = 0;
//the following will obviously not compile but i hope it helps explain
@Override
public InterfacePrice addPrices(BnSPrice price1, BnSPrice price2) {
return null;
[...more code here...]
}
所以我想做的是基于 100 铜是 1 银的事实编写一个简单的添加方法,依此类推。现在我的问题: 编译器不允许我将参数更改为我理解的 BnSPrice 类型,我只是想说明问题。如果我不知道它们具有正确的类型,那么尝试添加两个具体价格的黄金和白银是没有意义的,所以我首先想到的要获得正确的行为就是用普通的 InterfacePrice 覆盖该方法参数并在方法开始时进行类型检查并转换为适当的类型,但这似乎不是很有效或美观。
问题:当我的客户端代码只需要知道接口时,如何更改设计以灵活地添加其他价格模型? (我只是在学习java,如果问题有一些我看不到的明显答案,请原谅我。)可以通过使用泛型来解决吗? (我对这些了解不多……我正在努力让泛型的用法进入我的脑海。)
提前感谢您的帮助。
【问题讨论】:
-
那么您的问题是如何只允许使用兼容的价格对象(例如黄金和白银)而不是不兼容的类型调用 addPrice?或者只是如何添加两个使用相同接口的不同对象?
-
首先,davidxxx 的回答对我遇到的问题很明显。
标签: java generics inheritance interface