アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaについて勉強しているのですが、円の中に四角を作るというプログラムを作ろうとしたところ
tes.java:43:シンボルを見つけられません。
シンボル:メソッド drawSquare(int,int,int,java.awt.Graphics)
場所:Assortのクラス
a.drawSquare(x,y,w,g);

というエラーが出てコンパイルできません。drawCircleからdrawSquareを実行するようにしたいのですが、どうしたらよいか教えていただけないでしょうか。


importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
public class tes {
static MyCanvasmc;
public static void main(String[] args) {
tes ac_listener = new tes();
JFramejf = new JFrame("tes");
JPanel p = new JPanel();
mc = new MyCanvas();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mc.setPreferredSize(new Dimension(700,700));
jf.getContentPane().add(mc);
p.add(mc);
jf.getContentPane().add(p);
jf.pack();
jf.setVisible(true);
}
}

abstract class Assort{
double x,y;
}

class Square extends Assort{
public void drawSquare(int x, int y, int w, Graphics g) {
double k=Math.sqrt(2);
double _w=w/2/k;
g.drawRect(x-(int)_w/2, y-(int)_w/2, (int)_w, (int)_w);
}
}

abstract class Circle extends Assort{
}

class Circle1 extends Circle {
Assort a;
Circle1(Assort _a) {
a = _a;
}
void drawCircle(int x, int y, int w, Graphics g){
g.drawOval(x-w/4,y-w/4,w/2,w/2);
a.drawSquare(x,y,w,g);
}
}
class MyCanvas extends JPanel {
public void paintComponent( Graphics g ) {
super.paintComponent(g);
Circle1 d1 = new Circle1 ( new Square() );
d1.drawCircle(350,350,700,g);
}
}

A 回答 (1件)

Circle1クラスの中でaの型はAssortであり、AssortにはdrawSquareメソッドがないから、エラーになるのは当たり前。


aや_aの型をAssortからSquareに変えれば解決。
    • good
    • 0
この回答へのお礼

返事遅くなりました。
できました!ありがとうございます!
もう少し基本を勉強し直さなければ…

お礼日時:2009/12/25 00:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!