【问题标题】:Abstract Class not initializing a parameter [closed]抽象类未初始化参数[关闭]
【发布时间】:2018-03-02 12:39:08
【问题描述】:

我正在尝试创建一个抽象类 SolidFigure。圆柱体和矩形棱柱都将继承自它。

我的问题是,当我实例化两个类(圆柱体或 rectPrism)中的任何一个时,构造函数不会初始化 SolidFigure 中的高度,这是一个公共属性(它将为零)

这是代码:

立体图:

public abstract class SolidFigure {

    private double height;

    public SolidFigure(double height) {
        height = this.height;
    }

    public double getHeight() {
        return height;
    }

    protected abstract boolean isEqual(SolidFigure s);

    protected abstract double calculateVolume();
}

气缸:

 class Cylinder extends SolidFigure{

   private double radius;
   private static double PI = 3.14;

   public Cylinder(double height, double radius) {
       super(height);
       this.radius = radius;
   }

   @Override
   protected double calculateVolume() {
        return radius * PI * getHeight();
   }

   @Override
   protected boolean isEqual(SolidFigure s) {
       return this.calculateVolume() == s.calculateVolume();
   }
}

矩形棱镜:

   class RectPrism extends SolidFigure{
      private double length, width;

   public RectPrism(double height, double length, double width) {
       super(height);
       this.length = length;
       this.width = width;
   }

   @Override
   protected double calculateVolume() {
        return length * width * getHeight();
   }

   @Override
   protected boolean isEqual(SolidFigure s) {
       return this.calculateVolume() == s.calculateVolume();
   }
 }

主要:

    SolidFigure c = new Cylinder(12.0, 3);
    RectPrism r = new RectPrism(10.0, 4, 2);

    System.out.println(c.getHeight()); // This is zero
    System.out.println(r.calculateVolume()); // zero resulting from height

【问题讨论】:

  • 高度 = this.height;将此更改为 this.height =height;

标签: java class inheritance polymorphism abstraction


【解决方案1】:

应该是相反的

public SolidFigure(double height) {
        this.height = height;
    }

【讨论】:

  • 这很尴尬:)。谢谢!
【解决方案2】:

请更改

public SolidFigure(double height) {
        this.height = height;
    }

你的代码有什么问题

在您的代码height = this.height ; 中,这意味着您将实例变量高度的值分配给参数可验证的高度。它的默认值为 0d,所以你会像这样得到答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多