演習問題8解答例

問1 サブクラスによる正方形,円,及び,正三角形の表現
問2 サブクラスによる 8 進,10 進,及び,16 進の出力

[問1]クラス Shape をスーパークラス,正方形,円,正三角形をそのサブクラスとして定義せよ.なお,それらの面積を表すメソッドを,抽象メソッドとしてスーパークラスで定義せよ.
/****************************/
/* 正方形,円,正三角形     */
/*      coded by Y.Suganuma */
/****************************/
import java.io.*;
					// クラス Shape (抽象クラス)
abstract class Shape {
	abstract double menseki();      // 面積の計算(抽象メソッド)
}
					// クラス Rectangle
class Rectangle extends Shape {
	private double size;
	Rectangle(double s) { size = s; }   // コンストラクタ
	double menseki()                    // 正方形の面積
	{
		return size * size;
	}
}
					// クラス Circle
class Circle extends Shape {
	private double size;
	Circle(double s) { size = s; }      // コンストラクタ
	double menseki()                    // 円の面積
	{
		return 3.141592654 * size * size;
	}
}
					// クラス Triangle
class Triangle extends Shape {
	private double size;
	Triangle(double s) { size = s; }    // コンストラクタ
	double menseki()                    // 正三角形の面積
	{
		return  0.433012701 * size * size;
	}
}
                    // main
public class Test {
	public static void main(String args[])
	{
		Rectangle r1 = new Rectangle (1.0);
		Circle c1 = new Circle (1.0);
		Triangle t1 = new Triangle (1.0);
		System.out.println(r1.menseki() + " " + c1.menseki() + " " + t1.menseki());
	}
}
		
[問2]整数の値を変数として持つクラス Number をスーパークラスとして定義し,その値を 8 進,16 進,及び,10 進で出力するメソッドを持つクラスをそのサブクラスとして定義せよ.なお,出力を行うメソッドを,抽象メソッドとしてスーパークラスで定義せよ.
/****************************/
/* 8進,10進,16進     */
/*      coded by Y.Suganuma */
/****************************/
import java.io.*;
					// クラス Number (抽象クラス)
abstract class Number {
	protected int num;
	Number(int n) { num = n; }   // コンストラクタ
	abstract void out();         // 出力(抽象メソッド)
}
					// クラス O8
class O8 extends Number {
	O8(int n) { super(n); }      // コンストラクタ(親のコンストラクタ)
	void out()                   // 8進出力
	{
		System.out.println(Integer.toOctalString(num));
	}
}
					// クラス O10
class O10 extends Number {
	O10(int n) { super(n); }     // コンストラクタ(親のコンストラクタ)
	void out()                   // 10進出力
	{
		System.out.println(num);
	}
}
					// クラス O16
class O16 extends Number {
	O16(int n)  { super(n); }    // コンストラクタ(親のコンストラクタ)
	void out()                   // 16進出力
	{
		System.out.println(Integer.toHexString(num));
	}
}
					// main
public class Test {
	public static void main(String args[])
	{
		O8 n1 = new O8 (200);
		O10 n2 = new O10 (200);
		O16 n3 = new O16 (200);

		n1.out();
		n2.out();
		n3.out();
	}
}
		

菅沼ホーム 演習解答例目次 本文目次 付録 索引