Java 继承和子类基础

Java 继承和子类基础,java,inheritance,superclass,Java,Inheritance,Superclass,我不熟悉创建子类,不知道如何“限制”子类的功能,尽管我正在使用超类的功能 在我的子类中,我想在我的超类中使用getCash()方法,但我只想让它给我一个结果,如果从我的子类中存储的日期起已经超过了5天。我的代码如下所示: public class Super{ private double cash; public Super(double cash){ this.cash = cash; } public void deposit(doub

我不熟悉创建子类,不知道如何“限制”子类的功能,尽管我正在使用超类的功能

在我的子类中,我想在我的超类中使用
getCash()
方法,但我只想让它给我一个结果,如果从我的子类中存储的
日期起已经超过了5天。我的代码如下所示:

public class Super{

    private double cash;

    public Super(double cash){
        this.cash = cash;
    }

    public void deposit(double amount) {
        if (amount > 0){
            this.cash += amount;
        }
    }

    public double getCash(){
        if (this.cash > 0){
            return this.cash;
        }else {
            return 0;
        }
    }
}

public class Sub extends Super {

    private LocalDate date;

    public Sub(double cash) {
        super(cash);
    }
}
这是解决问题的正确方法吗?或者我应该实现我的超类中所需的所有逻辑,然后只传递一个变量告诉它是调用函数的超类还是子类?最佳做法是什么


提前感谢。

您可以使用多态性重新定义子类中的函数。
函数需要具有相同的签名(名称+参数)

感谢。

请参阅:

仅当日期差为5天时返回的行为是子类的行为,因此您必须仅在子类中写入该条件,但是在条件检查之后,您可以调用
super.getCash()

我认为你可以在你的子类中使用这个方法

public double getCash() {
    if (/* your date check 8*/) {
        return super.getCash();  
    }
    return 0.0;
}

您所说的很有道理:您确实应该在子类中重写,并在需要时调用super;但是,您的代码段不会这样做,也不会编译,因为getCash方法的路径不会返回双精度值(即else)。你能对此多加评论吗?@luanico我在Atom中编写示例代码时速度有点快,但编译问题现在已经解决了。至于覆盖;你知道函数是否必须像在超类中那样被复制,包括变量名和所有内容吗?谢谢,我不知道这是一种常见的做法,因为子类“覆盖”似乎有点奇怪它的超类。
this.cash
将不起作用,因为它在子类中不可见,如果我没记错的话,你必须这样看待它:子类是超类的一个特化。专门化意味着从现有类中创建新的子类,您可以在其中重写超类的方法。仅仅因为要在子类中使用变量,就将其设置为受保护的变量是一种不好的做法。:)好吧,我的错。我看到你回答了,这显然是一个更好的方法:)@joseph如果您的问题已解决,请标记:)。
public double getCash() {
    if (/* your date check 8*/) {
        return super.getCash();  
    }
    return 0.0;
}