簡體   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