gpt4 book ai didi

Java - 重写的方法没有被调用

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:50:08 25 4
gpt4 key购买 nike

我正在做一个 Java 练习,无法弄清楚我做错了什么。我制作了一个电影类(带有变量:评级、标题、movieId 和 FEE_AMT 的常量),然后扩展了类: Action 、喜剧和戏剧。这些派生类没有其他变量,只是一个不同的 FEE_AMT。

在 Movie(和派生类)中有一种计算滞纳金的方法:

/**
* Returns the late fee due on a Movie rental
* @param days the number of days for late fee calculations
* @return true or false depending on the evaluation of the expression
**/
public double calcLateFees(int days){
return(days * FEE_AMT);
}

如果我直接用对象调用方法,例如:comedy1.calcLateFees(2) - 它将根据派生方法中不同的常量值生成正确的费用金额。

现在我需要创建一个 Rental 类,并在 main() 中创建一个类型为 rental 类的数组来保存 Rental 对象(由 Movie 对象、renterId和 daysLate)。下面的方法接受一个 Rental 对象数组并返回数组中所有租金的滞纳金:

/**
* lateFeesOwed returns the amount of money due for late fees on all movies
* which are located in an array of Rentals.
*
* @return feeDue the amount of money due for late fees.
*/
public static double lateFeesOwed(Rental[] rentalArray){
double feeDue = 0;

for(int i = 0; i < rentalArray.length; i++)
{
feeDue += rentalArray[i].calcFees(); //This is part of the problem??

}

return feeDue;
}

这个方法调用:

/**
* CalcFees returns the amount of money due for late fees on a movie rental.
*
* @return feeDue the amount of money due for late fees.
*/
public double calcFees(){
double feeDue = rentalName.calcLateFees(this.daysLate);
return feeDue;
}

但问题是 calcFees() 方法正在调用 calcLateFees() 但不是调用派生类,而是调用 Movie 类并返回不正确的数量。

我不确定我的问题在哪里阻止调用重写方法 calcLateFees()

谢谢。

最佳答案

These derived classes have no other variables, just a different FEE_AMT.

这就是问题所在。数据成员不是多态的。您需要做的是将 FEE_AMT 变成一个方法,并在派生类中覆盖该方法。

// Movie

public double calcLateFees(int days){
return(days * getFeeAmt());
}

protected abstract double getFeeAmt(); // or implement if you wish

// Action etc

@Override
protected double getFeeAmt() { return ...; }

关于Java - 重写的方法没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com