★★ Java の宿題ここで答えます Part 61 ★★
レス数が950を超えています。1000を超えると書き込みができなくなります。
0973デフォルトの名無しさん
2007/07/15(日) 22:37:01クラス設計が根本的に間違っている。アプレットの動作原理も理解してなさそう。
Appletクラスが図形の元のクラスなのでなく、
図形クラスというベースになるクラスを作って、それを継承した直線クラスや四角形クラス、楕円クラスを作る。
図形クラスに例えばdrawメソッドを定義しておいて、
各サブクラスでdrawメソッドをオーバーライドして実際の図形を描くように実装する。
アプレットはpaintメソッドで図形クラスのdrawメソッドを呼び出すことで図形を図形クラス自身に描画させる。
その時、直線クラスのdrawや四角形クラスのdrawを直接呼ぶのではなく、
図形クラスのdrawとして呼び出すことで、動的な型に応じたdrawメソッドを呼び出すようにすれば、
ポリモルフィズムによる図形の描き分けってことにたぶんなる。
例えばこういうふうに。
class ... extends Applet {
private 図形[] fa = new 図形[100];
public void init() {faの要素に図形クラスのサブクラスのインスタンスを入れる}
public void paint(Graphics g) {
for (図形 f : fa) f.draw(g); // ここで図形クラスの配列faに登録された各図形インスタンスを描画
}
}
abstract class 図形 {
public void draw(Graphics g);
}
class 直線 extends 図形 {
public void draw(Graphics g) {直線を描くための実装}
}
レス数が950を超えています。1000を超えると書き込みができなくなります。