java - java中的简单抽象类

标签 java class abstract

所以我需要为容器类实现 getCurrentVolumeInCCs 方法,但是我对如何实现有点困惑。另外,我在 Glass 和 Cup 类中都获得了正确的体积值,但是当我调用 Vessel 类中的任何其他方法时,这些值不会被保留。我猜测是因为它们存储在子类中并且不能在基类中使用,对吗?

船舶类别(摘要)

package containers;

public abstract class Vessel {
    private double volume; 
    private double currentVolume;
    public Vessel() {
        volume = 0;
        currentVolume = 0;
    }

    abstract double getVolumeInCC();

    public double getCurrentContents() {


        return currentVolume;
    }

    public double drink(double amountToDrink) {
        double volumeLeft; 

        System.out.println("you drank " + amountToDrink + " CCs");
        volumeLeft = volume - amountToDrink;

        return volumeLeft;
    }

    public double fill(double amountPoured) {
        double volumeAdded = amountPoured;
        double volumeSpilled = 0;

        System.out.println("you poured " + amountPoured + " CCs");
        if(volumeAdded > volume) {
            volumeSpilled = amountPoured - volume;
            System.out.println("you spilled " + volumeSpilled);

        }
        return volumeAdded;
    }

}

玻璃类

package containers;

public class Glass extends Vessel{
    private double volume;
    private double radiusBase;
    private double height; 

    public Glass() {}

    public Glass(double r, double h) {
        this.radiusBase = r;
        this.height = h;
    }

    @Override
    double getVolumeInCC() {
        volume = (Math.PI)*(Math.pow(radiusBase, 2))*height;

        return volume;
    }
}

杯赛

package containers;

public class Cup extends Vessel {
    private double volume;
    private double radiusLip;


    public Cup(double r) { 
        volume = 0;
        this.radiusLip = r;

    }

    @Override
    double getVolumeInCC() {
        volume = (0.5)*(Math.PI)*(Math.pow(radiusLip, 3))*(4/3);

        return volume;
    }

}

最佳答案

您正在子类中隐藏 Vessel 中的 volume,因为它是一个 私有(private) 字段。我相信您希望在 Vessel 中保护 volumecurrentVolume

protected double volume; 
protected double currentVolume;

此外,您应该从子类中删除 private doublevolume(这样您就不会遮蔽它们现在从 Vessel 继承的字段)。

关于java - java中的简单抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057620/

相关文章:

java - “Cannot find symbol”或 “Cannot resolve symbol”错误是什么意思?

javascript - 需要帮助使用 jquery 操作类

java - 代码返回节点而不是子类的值

参数的java通用类型与抽象类

java - 接口(interface) : Java Language Specification

java - 使用 Asynctask 在 Android 中显示 ProgressBar

java - 如何通过 log4j.properties 禁用 OpenNLP 的 Log4j

java - 使用 Java processbuilder 关闭 HDMI 电视

c++ - 类的指针与非指针成员

c++ - 尝试创建 SceneNode 时分配抽象类类型的对象