2013-04-23 5 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(); "' - Какая у вас проблема? Вы хотите задать как можно более конкретный вопрос, если мы сможем вам помочь. –

+0

Возможно, это поможет, если вы выясните, какие переменные-члены являются частными, защищенными или общедоступными. Обратите внимание, что вы не укажете это в своем коде, а afaik Java использует защищенные по умолчанию. – luksch

+0

Будет хорошо, если вы будете следить за кодом в отступлении – Micha

ответ

0

Внутри вашей for петли вам нужно вызвать метод draw для конкретного Shape, что вы находитесь, и вам не нужно вызывать System.out.println(), если вы хотите другую пустую строку.

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

Удалите линии, такие как call.draw. Для вызова метода вы не используете call. На самом деле вам даже не нужен экземпляр вашего объекта Caller. Просто назовите метод draw на объектах Shape, которые у вас уже есть.

Как и в ответе Жлордо, нет необходимости в том, чтобы класс Shape был абстрактным, если у него нет методов. Таким образом, вы можете либо сделать draw метод abstract, либо вы можете удалить abstract из класса Shape.

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

0

Есть несколько проблем с вашим кодом:

1) Метод draw() в абстрактном классе должен быть выполнен абстрактно. Или вы можете реализовать его как «частичное», как в решении, которое я отправляю дальше вниз, а затем без абстрактного ключевого слова в классе формы:

2) новая строка («цвет») не требуется. Строки неизменяемы, поэтому вы можете просто написать, как показано ниже.

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