2016-06-10 78 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()); 
    } 
}