练习类继承Java

时间:2019-01-17 18:25:19

标签: java

我有这个练习来做解决问题的课程。我从面向对象编程的世界开始,这对我有很大帮助。我有这个解决方案,我想请您复习一下,我对它是否可以运行还有些怀疑,因为它告诉我不能修改Contract类: 合同类是我作为参考的

您要创建三种新型合同:

  

高级。在您寄出1000封电子邮件之前,不收取任何包裹费用,但最终金额增加了699欧元。

     

易碎。前100个易碎包裹不收费,仅发送100个易碎包裹后   对这种类型的电池收费一分之二。非易碎包装通常需要收费。大量的   最终金额。

     

飞机。不收取包裹费用。最终金额是创建合同时确定的金额,但是   以后可以修改。

考虑到我们不能修改现有的类,也不能执行关于如何实现它们的假设,请准备问题解决方案的类图并在Java中实现解决系统新需求所需的类。

public class Contract {
/ **
* Initialize a new contract for the Client c.
* /
public Contract (Client c) {

}

/ **
* Add Package p to the set of packages to be invoiced in a period of
* billing Package has methods that return boolean:
* isFragile () and isUrgent ().
* /
public void porte (Package p) {

}

/ **
* Returns the total invoice amount of a billing period.
* Contains fixed costs and charges for the packages sent.
* /
public double amount () {

}

/ **
* Reset the billing of a period.
* /
public void reset () {

 }
}

我有

public class Package {

    public Package (){

    }

    public boolean isFragile(){
        return true;
    }

    public boolean isUrgent(){
        return true;
    }

}

public class Customer{

    private int CustomerNumber;

    public Customer(int CustomerNumber){
        this.CustomerNumber= CustomerNumber;

    }

    public int getCustomerNumber(){
        return CustomerNumber;
    }

}



public class Premium extends Contract {

    private int cont;

    public Premium(Customer c) {
        super(c);
        cont = 0;

    }

    @Override
    public void porte(Package p) {
        cont++;

    }

    @Override
    public double amount() {
        if (cont <= 1000){
            return 699;
        }
        return 0;
    }

    @Override 
    public void reset(){
        cont = 0;
    }

}

public class Fragil extends Contract {

    private int cont;

    public Fragile(Customer c) {
        super(c);
        cont = 0;

    }

    @Override
    public void porte(Package p) {
        if (p.isFragile()) {
            cont++;
        }
        super.porte(p);
    }

    @Override
    public double amount(){
        return Math.floor((cont-100)*0.5);
    }

    @Override
    public void reset(){
        cont = 0;
    }

}

public class Plane extends Contract{

    public Plane(Customer c){
        super(c);

    }

    public void setPrize(double prize){
        super.prize = prize;

    }

    @Override 
    public double amount(){
        return super.getPrize();
    }

}

1 个答案:

答案 0 :(得分:0)

由于这是练习,因此我建议继续并自己检查一下。 但是,我会给您一些线索和在您的方法中注意到的事情。

首先,您获得了继承权。 其次,我注意到您只计算包裹数(至少在Fragil合同中)而不是计算账单。因此,您应该确定每个Package的费用(您可以将这些信息作为Package的私有财产持有。

另外,编写此代码存在问题:

@Override
public double amount(){
    return Math.floor((cont-100)*0.5);
}

如果cont <100怎么办?假设cont = 40。 然后,客户将必须支付Math.floor(-60 * 0.5)=-30而不是0。 因此,您将再次重写此逻辑。

另一件事, 如果包装数量为1000或更少,则固定价格为699,但是如果包装数量超过1000,那么客户不应该支付一分钱?感觉不对。

@Override
public double amount() {
    if (cont <= 1000){
        return 699;
    }
    return 0;
}

我想您应该在这种合同中将固定价格定为699,但是从包装号1001开始-您应该添加包装的成本(我之前谈到过的相同物业)。

希望我能帮上忙。