2017-10-04 70 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