繁体   English   中英

从超类调用变量到子类

[英]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;
  }
}

圆锥不是圆的适当子类,圆锥应具有一个字段Circle baseShape

这里的变量区域是一个实例变量,因此其默认值设置为0.0d。 请参考此链接 如果要更改区域值,则要调用getArea()方法。 检查下面的代码,

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

您正在使用protected完全可以将变量继承给subclass。 这是正确的答案

//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。我认为您已经设置了该值。 您应该使用关键字来获取设置值。 如果您将整个代码放入而不只是将其隐藏为注释,则很容易发现该缺陷。

为父类和子类添加构造函数,如下所示。

//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()方法。

public class Test {

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM