我的作业不太确定从哪里开始。这就是我应该做的。
创建一个抽象类DiscountPolicy。它将具有单个抽象方法computeDiscount,该方法将返回购买给定数量的单个项目的折扣。该方法有两个参数,count(int)和itemCost(float)
从“折扣策略”派生一个类BulkDiscount。它将具有一个带有两个参数的构造函数,最小值和百分比。它将定义一个方法computeDiscount,以便如果一件商品的购买数量大于最小值,则折扣为该类别的百分比。 ComputeDiscount将返回总折扣。
从DiscountPolicy派生一个BuyNItemsGetOneFree类。该类将具有一个具有单个参数n的构造函数。另外,该类将定义方法computeDiscount,以便第n个项目均可用。例如:
如果n为3,且商品成本为$ 10。前2个项目没有折扣。第3至5件商品有$ 10的折扣,第6件商品有$ 20的折扣,以此类推。
对于BuyNItemsGetOneFree –可以通过calculateDiscount方法接收购买的商品总数和商品成本,并返回适用的总折扣。
在您的主程序中,请表明computeDiscount方法适用于BulkDiscount和BuyNItemsGetOneFree类。
这就是我开始进行设置的方式。我想使我的方法和参数位于正确的位置,并且想知道我在哪里定义老师希望我传递的参数。
public class Ex1012 {
public static void main(String[] args) {
// TODO Auto-generated method stub
DiscountPolicy bulk = new BulkDiscount();
System.out.println();
DiscountPolicy bngo = new BuyNItemsGetOneFree();
}
}
public abstract class DiscountPolicy {
abstract void computeDiscount(int count, float itemCost){
return discount;
}
}
public class BuyNItemsGetOneFree extends DiscountPolicy {
BuyNItemsGetOneFree() {
}
BuyNItemsGetOneFree(int n){
DiscountPolicy.computeDiscount(int count, float itemCost);
//set n to a variable here??
//calculations go here
//Where to set count and itemCost??
}
}
public class BulkDiscount extends DiscountPolicy {
public BulkDiscount(int minimum, float percent){
if (quantity > minimum){
super.ComputeDiscount(int count, float itemCost);
//calculations go here
//Where to define count, itemCost, minimum, and percent??
}
}
}
我只是担心类和参数本身之间的关系,因为一旦我拥有多个这样的类,我就会感到困惑。任何见识将不胜感激。谢谢!
最佳答案
抽象方法可能没有主体,因此computeDiscount(...)
的定义应为:
abstract void computeDiscount(int count, float itemCost);
然后,在扩展抽象类的每个具体类中,您都必须实现该方法。通常,抽象方法在某种程度上类似于在接口中定义的方法(它们被声明但没有默认实现),但仍然存在差异(可以被保护或封装为私有,只能由子类实现)。
在大多数情况下,您都有一个抽象类,提供了一些默认逻辑,只需要子类来填充一些依赖具体实现的“漏洞”。
因此,基本上,您将参数存储为
BuyNItemsGetOneFree
和BulkDiscount
作为实例变量,并在调用computeDiscount(...)
时使用它们。您在构造函数中调用它,这很可能是错误的位置。我想你的主要应该在您直接创建的对象上调用该方法,例如DiscountPolicy bngo = new BuyNItemsGetOneFree(5);
double discountForFour = bngo.computDiscount(4,4.95f);
double discountForFive = bngo.computDiscount(5,4.95f);
请注意,根据您的分配,您的
computeDiscount(...)
方法应返回一个值:...一个抽象方法computeDiscount,将为购买给定数量的单个项目返回折扣...
编辑:
//在哪里设置count和itemCost?
就像我上面说的,您不必“设置”(存储)它们,而只能将它们用于计算。
关于java - 我需要帮助来了解抽象类之间的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7333307/