2016-06-10 77 views
0

我沒有運氣從我的超類調用一個變量到我的子類。任何人都可以幫忙嗎?調用變量到超類的子類

//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) 
    } 
    } 

有很多更多的代碼,但我在的主要問題是子類中的「區域」變量是0.00,我不知道該如何得到它等於「區域」所計算出的超

+2

您應該在使用'area'之前運行'getArea()'。 – GAVD

回答

1

這裏變量區域是一個實例變量,所以它的默認值設置爲0.0d。請參閱link。如果要更改面積值,則要調用 getArea()方法。檢查以下代碼,

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

嘗試:

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

您正在使用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

除非您將該值設置爲半徑和麪積,否則它將保持爲0.我假定您已設置該值。您應該使用這個關鍵字來獲得設定值。如果將整個代碼放在一起,而不是將其作爲註釋隱藏起來,那麼很容易找到這個漏洞。

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()); 
    } 
}