第13回 新しいクラス(1)

  
  
 演習
 
<演習1>
Paperクラスを継承して、Origamiクラスを作成する。
Origamiクラスは色のメンバ変数 String col; を持つものとする。
空欄 /* ここを埋める */ を適切に埋めてプログラムを完成させなさい。
なお、ここには2個のメソッドが入る。

ソースファイル名は Ensyu1301.java とする。
 
class Origami extends Paper
{
  String col; // 色

  /* ここを埋める */

}

class Paper
{
  double width;  // 幅(cm)
  double height; // 高さ(cm)

  public void setSize( double w, double h ){ // サイズを設定する
    width = w;
    height = h;
  }
  public void showSize(){ // サイズを表示する
    System.out.println(" (幅,高さ) = " + width + ", " + height );
  }
}

class Ensyu1301
{
  public static void main(String[] args)
  {
   
    // 紙クラスのオブジェクト
    System.out.println("\n- 紙 ----");
    Paper pp = new Paper();
    pp.setSize( 21.0, 29.7 );
    pp.showSize();

    // おりがみクラスのオブジェクト
    System.out.println("\n- おりがみ ----");
    Origami og = new Origami();
    og.setSize( 15.0, 15.0 );
    og.showSize();
    og.setColor("赤色");
    og.showColor();
  }
}

  
<実行結果>
Z:\java>java Ensyu1301

- 紙 ----
 (幅,高さ) = 21.0, 29.7

- おりがみ ----
 (幅,高さ) = 15.0, 15.0
 色 = 赤色

Z:\java>
 
 
 
<演習2>
Waterクラス(水クラス)を継承して、Oyuクラス(お湯クラス)を作成する。
/*(※1)*/〜/*(※3)*/ を適切に埋めて、プログラムを完成させなさい。
なお、/*(※2)*/Waterクラスのコンストラクタを呼び出すようにすること。

ソースファイル名は Ensyu1302.java とする。
 
class Oyu /*(※1)*/ // お湯クラス
{
  int temp = 100; // 温度

  // 量vと温度tを指定するコンストラクタ
  public Oyu( double v, int t ){

    /*(※2)*/

  }
  void showTemp(){ // 温度を表示
   
/*(※3)*/
  }
}
class Water // 水クラス
{
  double vol = 0.0; // 体積(cc)

  public Water( double v ){ // 体積を指定するコンストラクタ
    vol = v;
  }
  public void showVol(){ // 体積を表示
    System.out.println(" 体積 = " + vol + " cc" );
  }
}
class Ensyu1302
{
  public static void main(String[] args)
  {
    // お湯クラスのオブジェク
    System.out.println("- お湯 ----");
    Oyu oy = new Oyu( 180.0, 85 );
    oy.showTemp();
    oy.showVol();
  }
}

    
<実行例>
Z:\java>java Ensyu1302
- お湯 ----
 温度 = 85 度
 体積 = 180.0 cc

Z:\java>
     
 
<演習3>
以下は、サブクラスからスーパークラスのコンストラクタが自動で呼び出されるしくみを確認するプログラムである。
Super_Aクラスのメンバ変数 int num;Sub_Aクラスでも利用できる。
/*(※1)*/〜/*(※2)*/ を適切に埋めて、プログラムを完成させなさい。
また、コンストラクタについて、Super_AクラスおよびSub_Aクラスのコンストラクタが呼び出される順番を確認しなさい。

ソースファイル名は Ensyu1303.java とする。
    
class Sub_A extends Super_A // サブクラス(子クラス)
{
  public Sub_A(){ // 引数なしコンストラクタ
    System.out.println("コンスト at Sub_A");
   
/*(※1)*/; // numに25を加算する
  }
}
class Super_A // スーパークラス(親クラス)
{
  int num;


  public Super_A(){ // 引数なしコンストラクタ
    System.out.println("コンスト at Super_A");
   
/*(※2)*/; // numに10を代入する
  }
  public void show(){
    System.out.println(" > num = " + num + "  at Super_A" );
  }
}
class Ensyu1303
{
  public static void main(String[] args)
  {
    // Super_Aクラスのオブジェクト
    System.out.println("\n- Super_Aのオブジェクト ----");
    Super_A oya = new Super_A();
    oya.show();

    // Sub_Aクラスのオブジェクト
    System.out.println("\n- Sub_Aのオブジェクト ----");
    Sub_A ko = new Sub_A();
    ko.show();
  }
}

  

<実行例>
Z:\java>java Ensyu1303

- Super_Aのオブジェクト ----
コンスト at Super_A
 > num = 10  at Super_A

- Sub_Aのオブジェクト ----
コンスト at Super_A
コンスト at Sub_A
 > num = 35  at Super_A


Z:\java>

  
  
   
<演習4>
新幹線の自由席を処理するZiyuuクラスを作成し、以下では 新大阪〜岡山 の料金を計算・処理する。
さらにZiyuuクラスを継承して、回数券を扱う Kaisuuクラスを作成して料金を計算する。
回数券は6枚つづりで購入するルールで、1枚あたり自由席券より 360円 安くなる。

/*(※1)*/〜/*(※3)*/ を適切に埋めてプログラムが動くようにしなさい。

ソースファイル名は Ensyu1304.java とする。
 
class Kaisuu /*(※1)*/ // 回数券クラス
{
  public Kaisuu(){ // 引数なしコンストラクタ
   
/*(※2)*/; // 1枚あたりのprice
  }
  void showGoukei(){ // 合計を表示
    System.out.println(" 6枚綴りの価格 = " +
/*(※3)*/ + "円");
  }
}
class Ziyuu // 自由席クラス
{
  int price; // 料金

  public Ziyuu(){ // 引数なしコンストラクタ
    price = 5500; // 新大阪〜岡山 自由席料金
  }
  public void showPrice(){ // 料金を表示
    System.out.println(" 料金 = " + price + " 円" );
  }
}
class Ensyu1304
{
  public static void main(String[] args)
  {
    // 自由席クラスのオブジェクト
    System.out.println("- 自由席 ----");
    Ziyuu zi = new Ziyuu();
    zi.showPrice();

    // 回数券クラスのオブジェクト
    System.out.println("- 回数券 ----");
    Kaisuu ka = new Kaisuu();
    ka.showPrice();
    ka.showGoukei();
  }
}

  
<実行例>
Z:\java>java Ensyu1304
- 自由席 ----
 料金 = 5500 円
- 回数券 ----
 料金 = 5140 円
 6枚綴りの価格 = 30840円

Z:\java>
  
  
 
<演習5>
以下はノートPCの簡単な仕様をクラスにしたもので、Normalクラスは普通仕様であり、Premiumクラスは高性能の仕様である。
Normalクラスは メモリ8GBストレージ256GBであり、
Premiumクラスは
 メモリ=Normalクラスの2倍
 ストレージ=Normalクラスの4倍
 ディスプレイの性能(2K or 4K)を表示
のようにする。
Normalクラスを継承してPremiumクラスを作成するものとし、以下の /*(※1)*//*(※5)*/ に適切な内容を埋めてプログラムが動くようにしなさい。

ソースファイル名は Ensyu1305.java とする。
  
class Premium extends Normal
{
  String disp;

  public Premium( String d ){ // コンストラクタ
    disp =
/*(※1)*/; // ディスプレイの解像度
    mem =
/*(※2)*/; // メモリは2倍
    hdd =
/*(※3)*/; // HDDは4倍
  }
  public void showSpecP(){
    System.out.print(", ディスプレイ:" + disp + "\n");
  }
}
class Normal // 普通仕様クラス
{
  int mem; // メモリ
  int hdd; // ハードディスク

  public Normal(){
    mem =
/*(※4)*/; // メモリ(GB)
    hdd =
/*(※5)*/; // ストレージ(GB)
  }
  public void showSpecN(){
    System.out.print( " メモリ:" + mem + "GB, HDD:" + hdd + "GB");
  }
}
class Ensyu1305
{
  public static void main(String[] args)
  {
    // ノーマル仕様PCクラスのオブジェクト
    System.out.println("\n- ノーマル仕様PC ----");
    Normal no = new Normal();
    no.showSpecN();

    // プレミアム仕様PCクラスのオブジェクト
    System.out.println("\n\n- プレミアム仕様PC ----");
    Premium pr = new Premium("4K");
    pr.showSpecN();
    pr.showSpecP();
  }
}

   
<実行例>
Z:\java>java Ensyu1305

- ノーマル仕様PC ----
 メモリ:8GB, HDD:256GB

- プレミアム仕様PC ----
 メモリ:16GB, HDD:1024GB, ディスプレイ:4K

Z:\java>
  

    
演習問題の提出について
演習1演習5のプログラムソースの内容をTextファイルに記述して、Cerezo から提出しなさい。
上記の内容をすべて1個のTextファイルにまとめ、ファイル名は

   [自分の学籍番号]+"_演習13.txt"  
  (例:"5412016_演習13.txt"、"5412003_演習13.txt" など


のように保存してから提出すること。
提出物には学籍番号と氏名を必ず記載しておくこと。
 
<提出ファイルの作成例>
第13回演習問題の回答  5412099 福山太郎

- 演習1 -----------------------------------------
class Ensyu1301
{
  public static void main(String[] args) 
  {
      : 
  }
}

- 演習2 -----------------------------------------
class Ensyu1302
{
  public static void main(String[] args) 
  {
      : 
      :