Java缺少返回语句-继承

Java缺少返回语句-继承,java,inheritance,return,Java,Inheritance,Return,我正在为一个图书馆写一个程序,里面有一个叫做book的类,它将包含作者和ISBN等详细信息。它也有以下方法来查找该书的到期罚款(根据该书是否为惊悚/浪漫/等等,费率将有所不同) 下面是我编写的一个子类,但是它不会编译,因为它缺少一个return语句。我已经尝试添加行“returnfine”;但它不会识别它,也不会让我将return类型更改为void public class Thriller extends Book { double findFine(int daysOverdue){

我正在为一个图书馆写一个程序,里面有一个叫做book的类,它将包含作者和ISBN等详细信息。它也有以下方法来查找该书的到期罚款(根据该书是否为惊悚/浪漫/等等,费率将有所不同)

下面是我编写的一个子类,但是它不会编译,因为它缺少一个return语句。我已经尝试添加行“returnfine”;但它不会识别它,也不会让我将return类型更改为void

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);
    }
}