2013-04-23 65 views
-4

好了,所以我有三個類如何從主方法打印空白方法

abstract class Shape 
{ 
int width, height; 
String color; 

public void draw()  
{  
} 
    } // end Shape class 

``

class Rectangle extends Shape 
    { 
Rectangle(int w, int h, String color) 
{ 
    width = w; 
    height = h; 
    this.color = new String(color); 
} 

public void draw() 
{ 
    System.out.println("I am a " + color + " Rectangle " + width + " wide and " + height + " high."); 
} 
    }// end Rectangle class 

``

class Circle extends Shape 
    { 
    Circle (int r, String color) 
    { 
    width = 2*r; 
    height = 2*r; 
    this.color = new String(color); 
} 
public void draw() 
{ 
    System.out.println("I am a " + color + " Circle with radius " + width + "."); 
} 
    } // end Circle class 

``我所想do是創建一個新類來產生以下輸出: 我是一個藍色的矩形20寬和10高。 我是一個半徑爲30的紅色圓。 我是一個綠色的矩形25寬25高 但我有一個問題,調用方法draw();

This is the main class: 
public class Caller 
    { 
    public static void main(String args[]) 
    { 
Caller call= new Caller(); 
Shape[] myShape = new Shape[3]; 

    myShape[0] = new Rectangle(20,10,"blue"); 
    myShape[1] = new Circle(30, "red"); 
    myShape[2] = new Rectangle(25,25, "green"); 
    for (int i=0; i < 3; i++) 
    { 
System.out.println(); 
    } 
    call.draw(Rectangle); 
    call.draw(Circle); 
    } 
    } 
+2

關於,'「但我有一個問題,調用方法draw();」' - 你有什麼問題?如果我們能夠很好地幫助你,你會希望儘可能地問*特定問題。 – 2013-04-23 18:32:22

+0

也許這有助於確定哪些成員變量是私有的,受保護的或公共的。請注意,您並未在代碼中指定此選項,並且afaik Java使用protected作爲默認值。 – luksch 2013-04-23 18:35:55

+0

如果你留意你的代碼縮進,那該多好啊 – Micha 2013-04-23 18:53:24

回答

0

裏面你for循環,你要打電話,你是在特定Shapedraw方法,你不必叫System.out.println()除非你想另一條黑線。

for (int i=0; i < 3; i++) 
{ 
    myShape[i].draw(); 
} 

刪除像call.draw這樣的行。您不使用call來調用方法。實際上,您甚至不需要您的Caller對象的實例。只需在您已有的Shape對象上調用draw方法即可。

正如在jlordo的回答中,如果沒有方法,Shape類就不需要抽象了。因此,您可以製作draw方法abstract,或者您可以從Shape類中刪除abstract

1

您的draw()方法在Shape類中定義,而不是在您的Caller類上定義。

myShape [0] .draw()以打印出矩形爲例。

2

你的代碼格式很糟糕,所以這只是一個猜測。我想你應該改變

for (int i=0; i < 3; i++) 
    { 
System.out.println(); 
    } 
    call.draw(Rectangle); 
    call.draw(Circle); 

for (int i=0; i < myShape.length; i++) { 
    myShape[i].draw(); 
} 

此外,在Shape類變化

public void draw() 
{ 
} 

public abstract void draw(); 
+0

感謝你們的幫助。我知道我的代碼不是那麼專業,但我是新手。感謝jlordo和rgettman。你們是最有幫助的 – Brit 2013-04-23 21:37:51

0

有你的代碼的幾個問題:

1)抽象類中的draw()方法應該是抽象的。或者,您可以將其實現爲「部分」,就像我在解決方案中進一步發佈,然後在Shape類中沒有抽象關鍵字:

2)不需要新的String(「color」)。字符串是不可變的,所以你可以寫下如下。 3)你錯過了指定你的班級成員是私人的,公共的還是受保護的。考慮變量的可見性總是一個好主意。

4)您嘗試打印直徑不半徑

5)你嘗試調用一個方法的類,而不是實例

這裏是我的建議(未經測試...有可能是我沒有看到更多的問題):

class Shape 
{ 
    protected int width, height; 
    protected String color; 

    public void draw()  
    {  
    System.out.print("I am a " + color"); 
    } 
} // end Shape class 

class Rectangle extends Shape 
{ 
    Rectangle(int w, int h, String color) 
    { 
    this.width = w; 
    this.height = h; 
    this.color = color; 
    } 

    public void draw() 
    { 
    super(); 
    System.out.print(" Rectangle " + width + " wide and " + height + " high.\n"); 
    } 
}// end Rectangle class 

class Circle extends Shape 
{ 
    Circle (int r, String color) 
    { 
    this.width = 2*r; 
    this.height = 2*r; 
    this.color = new String(color); 
    } 
    public void draw() 
    { 
    super(); 
    System.out.print(" Circle with radius " + (width/2) + ".\n"); 
    } 
} // end Circle class 

在你需要做的是這樣的主要方法後:

Shape[] myShape = new Shape[3]; 

myShape[0] = new Rectangle(20,10,"blue"); 
myShape[1] = new Circle(30, "red"); 
myShape[2] = new Rectangle(25,25, "green"); 
for (int i=0; i < 3; i++) 
{ 
    myShape[i].draw(); 
}