从超类调用变量到子类

Calling variable to subclass from superclass

我无法从我的超类调用一个变量到我的子类。有人可以帮忙吗?

//SUPERCLASS
public class Circle {

  protected double radius;
  protected double area;

  //Some code to construct object and initialize radius

  //Return Calculated Area
  protected double getArea() {
    area = Math.pow(radius, 2) * Math.PI;
    return area;
  }

}

//SUBCLASS
public class Cone extends Circle {

  private double height;

//Some more code with constructors and different methods

  public double getVolume() {
    {
      return (area * height / 3)
    }
  }

代码还有很多,但我遇到的主要问题是在子类中,'area' 变量是 0.00,我不确定如何让它等于 'area' 在超类中计算

尝试:

public double getVolume() {
   return (getArea() * height / 3)
}

此外:圆应该在构造函数中用它的半径初始化并且没有字段区域,因为它依赖于半径:

public class Circle {

  protected final double radius;

  public Circle(double radius) {
    this.radius = radius
  }

  public double getArea() {
    return Math.pow(radius, 2) * Math.PI;
  }
}

圆锥体不是圆的真子class,圆锥体应该有场Circle baseShape

您正在使用 protected 将变量继承到子类完全没问题。这是正确答案

//SUPERCLASS
public class Circle {

  protected double radius;
  protected double area;

  //Some code to construct object and initialize radius

  //Return Calculated Area
  protected double getArea() {
    area = Math.pow(radius, 2) * Math.PI;
    return area;
  }

}

//SUBCLASS
public class Cone extends Circle {

  private double height;

//Some more code with constructors and different methods

  public double getVolume() {
    {
      return (getArea() * height / 3)
    }
  }

除非您将值设置为半径和面积,否则它将保持为 0。我假设您已经设置了该值。您应该使用 this 关键字来获取设置值。如果您将整个代码放在一起而不只是将其隐藏为注释,则很容易找到缺陷。

为 super class 和 sub-class 添加构造函数,如下所示。

//Super Class
public class Circle {

  protected double radius;
  protected double area;

  public Circle(double radius) {
    this.radius = radius;
    this.area = getArea();
  }

  protected double getArea() {
    area = Math.pow(radius, 2) * Math.PI;
    return area;
  }
}

//Sub Class
public class Cone extends Circle {

private double height;

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

public double getVolume() {
    {
      return (area * height / 3);
    }
  }
}

之后可以使用子getVolume()方法class.

public class Test {

  public static void main(String[] args) {
    Cone c = new Cone(3.0,5.0);
    System.out.println(c.getVolume());
  }
}

这里的变量area是一个实例变量,所以它的默认值设置为0.0d。参考这个link。如果你想改变面积值然后想打电话 getArea() 方法。检查下面的代码,

public double getVolume() {
      return (getArea()* height / 3)
}