Java缺少返回语句-继承
我正在为一个图书馆写一个程序,里面有一个叫做book的类,它将包含作者和ISBN等详细信息。它也有以下方法来查找该书的到期罚款(根据该书是否为惊悚/浪漫/等等,费率将有所不同) 下面是我编写的一个子类,但是它不会编译,因为它缺少一个return语句。我已经尝试添加行“returnfine”;但它不会识别它,也不会让我将return类型更改为voidJava缺少返回语句-继承,java,inheritance,return,Java,Inheritance,Return,我正在为一个图书馆写一个程序,里面有一个叫做book的类,它将包含作者和ISBN等详细信息。它也有以下方法来查找该书的到期罚款(根据该书是否为惊悚/浪漫/等等,费率将有所不同) 下面是我编写的一个子类,但是它不会编译,因为它缺少一个return语句。我已经尝试添加行“returnfine”;但它不会识别它,也不会让我将return类型更改为void public class Thriller extends Book { double findFine(int daysOverdue){
public class Thriller extends Book {
double findFine(int daysOverdue){
int rate = 5;
}
}
继承并没有你想象的那么远。方法本身必须是完整的。(但是,它可以调用超类各自的方法和其他方法。) 你最好像这样做
abstract class book{
//some data
protected int rate = 0;
double findFine(int daysOverdue){
int fine = daysOverdue * rate;
return fine;
}
}
public class Thriller extends Book {
{
rate = 5;
}
}
或者更像Java
abstract class book{
protected int getRate() {
return 0;
}
double findFine(int daysOverdue){
int fine = daysOverdue * rate;
return fine;
}
}
public class Thriller extends Book {
@Override
protected int getRate() {
return 5;
}
}
因为
fine
不是超类的字段,所以它只是一个方法字段。因此,派生类或此方法之外的任何对象都无法访问它。并且会发生错误,因为您没有按照方法类型的预期返回类型为double
的结果 首先,您要覆盖在超类中定义的方法,然后最好在方法签名之前使用@Override注释显式声明它
其次,您实际上只是在复制代码。也许可以试试:
abstract class Book{
private int rate = 0;
public Book(int rate){
this.rate = rate;
}
double findFine(int daysOverdue){
return = daysOverdue * this. rate
}
}
public class Thriller extends Book {
public Thriller(){
super(5);
}
}
该方法应该返回一个double。它不会返回任何东西。它所做的只是定义一个局部变量并为其赋值5。那么你期待什么呢?
abstract class Book{
private int rate = 0;
public Book(int rate){
this.rate = rate;
}
double findFine(int daysOverdue){
return = daysOverdue * this. rate
}
}
public class Thriller extends Book {
public Thriller(){
super(5);
}
}