我的作业不太确定从哪里开始。这就是我应该做的。


创建一个抽象类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);


然后,在扩展抽象类的每个具体类中,您都必须实现该方法。通常,抽象方法在某种程度上类似于在接口中定义的方法(它们被声明但没有默认实现),但仍然存在差异(可以被保护或封装为私有,只能由子类实现)。

在大多数情况下,您都有一个抽象类,提供了一些默认逻辑,只需要子类来填充一些依赖具体实现的“漏洞”。

因此,基本上,您将参数存储为BuyNItemsGetOneFreeBulkDiscount作为实例变量,并在调用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/

10-10 03:36