1. ホーム
  2. java

[解決済み] mainメソッドからvoidメソッドを表示させる方法

2022-02-26 13:47:26

質問

さて、3つのクラスがあります。

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

`` 私がやろうとしていることは、以下の出力を生成する新しいクラスを作成することです。 私は青色の長方形で、幅が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);
   } 
   }

解決方法は?

あなたの for ループを呼び出す必要があります。 draw メソッドで特定の Shape を呼び出す必要はありません。 System.out.println() もう1行空行が欲しい場合は別ですが。

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

のような行を削除します。 call.draw . を使用しません。 call を使用してメソッドを呼び出すことができます。 実際には Caller オブジェクトを作成します。 ただ単に draw メソッドを Shape オブジェクトを作成します。

jlordoさんの回答にもあるように Shape クラスは、メソッドを持たない場合は抽象化する必要があります。 そのため draw メソッド abstract を削除するか、あるいは abstract から Shape クラスがあります。