2017-10-04 73 views
-1

Image of Description传递变量到其他类或已经通过变量不同类

目的是让用户选择的形状(正方形,三角形或圆形),然后输入一个边界长度来使用。一旦输入了这些信息,我就可以计算出他们选择的周长和面积。

的问题是,我不希望为每个类的长度和面积的新变量,如果我没有,宁愿有变量声明,然后如果我能传递到类。

基本上我不想做这样,

class square { 

    double bLength; 
    double area; 

} 

class triangle { 

    double bLength; 
    double area; 

} 

class circle { 

    double bLength; 
    double area; 

} 

我可以声明它们的类外面再有类使用/继承他们或什么? 我必须为这样一个基本的问题道歉,我很新的Java和我真的不能相信围绕这一。

+0

像这样的事情? https://stackoverflow.com/questions/20864211/how-to-get-a-variable-from-another-class-in-java – SassyRegards201

+0

你不能绕过变量,只值。 – shmosel

+1

你为什么不创建一个抽象类(形状例如),添加字段,这个类,让你的其他类扩展呢? –

回答

1

传统的解决方案是使用继承:

class Shape { 
    double bLength; 
    double area; 

    Shape(double bLength, double area) { 
     this.bLength = bLength; 
     this.area = area; 
    } 
} 

class Square extends Shape { 
    Square(double bLength, double area) { 
     super(bLength, area); 
    } 
    // additional field, methods... 
} 

// same for the other shapes 
+0

直向前,这正是我正在寻找的,谢谢! – Brandan

+0

@Brandan,如果这个答案解决您的问题,请记得将其标记为接受(比分下方的刻度线)。 – domsson

0

您可以使用继承这个问题在下列方式:

声明一个名为Shape的类,所有其他类将继承

public class Shape { 

    public double length = 0; 
    public abstract double GetPerimeter(); 
    public abstract double GetArea(); 

    public Shape(double length) { 
     this.length = length; 
    } 
} 

然后让你的专业课程。例如。 :

public class Circle extends Shape { 
    public Circle(double length) { 
     super(length); 
    } 

    public double GetPerimeter() { 
     // Implement the perimeter logic here 
    } 

    public double GetArea() { 
     // Implement the area logic here 
    } 
} 

对所有类都这样做。这样你只有一个类的变量,而其他所有的变量都从它继承。

编辑

如果你想进一步优化(例如,你不希望函数调用的开销),像或许

public class Shape { 

    public double length = 0; 
    public double perimeter= 0; 
    public double area= 0; 

    public Shape(double length, double perimeter, double area) { 
     this.length = length; 
     this.perimeter= perimeter; 
     this.area = area; 
    } 
} 

public class Circle extends Shape { 
    public Circle(double length) { 
     super(length, 2 * Math.PI * length, Math.PI * length * length); 
    } 
} 
+0

谢谢!额外的信息也真的有用!得到了我需要去的。 – Brandan