#はじめに
オブジェクト指向の学習のために作成しました。
ストライクガンダムとストライクダガーの組み立てをイメージし、それぞれの特徴と共通する部分を意識して作成しました。
#手順
以下の手順で作成しました。
- インタフェースの作成
→3種のストライカーパックをインタフェースとします。 - スーパークラスの作成
→X100系フレームをスーパークラスとします。 - サブクラスの作成
→ストライクガンダムとストライクダガーをサブクラスとします。 - Factoryクラスの作成
→Factoryクラスにインスタンスの生成と、メソッドを呼び出すための記述を行います。
#インタフェースの作成
エール、ソード、ランチャーをインタフェースの形で作成し、それぞれの武装を以下のように記述します。
Striker.java
package practice;
public interface Striker {
String[] arrayAile = {"57mm高エネルギービームライフル", "ビームサーベル", "対ビームシールド"};
String[] arraySword = {"15.78m対艦刀「シュベルトゲベール」", "ビームブーメラン「マイダスメッサー」", "ロケットアンカー「パンツァーアイゼン」"};
String[] arrayLauncher = {"320mm超高インパルス砲「アグニ」", "120mm対艦バルカン砲", "350mmガンランチャー"};
//STRIKEクラス、DAGGERクラスで実装を提供します
void printDataAile();
void printDataSword();
void printDataLauncher();
}
#スーパークラスの作成
ストライクガンダムとストライクダガーはX100系フレームを基本骨格に使用しています。
また、特徴としてストライカーパックシステムという機能があります。
これらの特徴をX100frame.javaに以下のように記述します。
X100frame.java
package practice;
// 継承することを前提としているためabstractにしています
public abstract class X100frame {
private String name = "";
private String type = "X100系フレーム";
private String feature = "ストライカーパックシステム";
public X100frame(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public String getType() {
return this.type;
}
public String getFeature() {
return this.feature;
}
public void list() {
System.out.println("武装一覧:");
System.out.println("-------------------------");
}
// サブクラス側でオーバーライドするので、空のメソッドを記述しておきます
public abstract void printData();
public abstract void printDataPersonal();
}
#サブクラスの作成
ストライクガンダムをSTRIKEクラス、ストライクダガーをDAGGERクラスとして作成します。
その際、X100frameクラスを継承し、手順1で作成した3つのインタフェースも使用できるようにします。
STRIKE.java
package practice;
// X100frameクラスを継承し、Strikerインタフェースを使用可に
public class STRIKE extends X100frame implements Striker {
public STRIKE() {super("ストライクガンダム"); }
// 素ストライクのみの特徴
private String Model = "GAT-X105";
private String Armor = "フェイズシフト装甲";
private double height = 17.72;
private double weight = 64.80;
private String WEAPON[] = {"イーゲルシュテルン", "アーマーシュナイダー"};
// 素ストライクのみの特徴を出力するためメソッド
@Override
public void printData() {
System.out.println("モビルスーツ名:" + this.getName());
System.out.println("型式番号:" + this.Model);
// フレームと特徴はX100frameクラスから継承
System.out.println("フレーム:" + this.getType());
System.out.println("特徴:" + this.getFeature());
System.out.println("装甲:" + this.Armor);
System.out.println("全高:" + this.height + "m");
System.out.println("重量:" + this.weight + "t");
System.out.println();
}
@Override
public void printDataPersonal() {
for(int a = 0; a < WEAPON.length; a++ ) {
System.out.print(WEAPON[a] + " ");
}
System.out.println();
System.out.println("------------");
}
// ストライカーパックを装備した場合の武装を出力(Strikerインタフェースの実装を提供)
public void printDataAile() {
for(int a = 0; a < arrayAile.length; a++ ) {
System.out.print(arrayAile[a] + " ");
}
System.out.println();
System.out.println("------------");
}
public void printDataSword() {
for(int a = 0; a < arraySword.length; a++ ) {
System.out.print(arraySword[a] + " ");
}
System.out.println();
System.out.println("------------");
}
public void printDataLauncher() {
for(int a = 0; a < arrayLauncher.length; a++ ) {
System.out.print(arrayLauncher[a] + " ");
}
System.out.println();
System.out.println("------------");
}
}
ストライクガンダム
DAGGER.java
package practice;
// X100frameクラスを継承し、Strikerインタフェースを使用可に
public class DAGGER extends X100frame implements Striker {
public DAGGER() {super("ストライクダガー"); }
// 素ストライクダガーのみの特徴
private String Model = "GAT-01A1";
private String Armor = "ラミネート装甲(胴体部のみ)";
private double height = 18.00;
private double weight = 57.05;
private String WEAPON[] = {"イーゲルシュテルン", "52mm機関砲ポッド", "ビームカービン", "12.5mm対人機関銃×2"};
// 素ストライクダガーのみの特徴を出力するためメソッド
@Override
public void printData() {
System.out.println("モビルスーツ名:" + this.getName());
System.out.println("型式番号:" + this.Model);
// フレームと特徴はX100frameクラスから継承
System.out.println("フレーム:" + this.getType());
System.out.println("特徴:" + this.getFeature());
System.out.println("装甲:" + this.Armor);
System.out.println("全高:" + this.height + "m");
System.out.println("重量:" + this.weight + "t");
System.out.println();
}
@Override
public void printDataPersonal() {
for(int a = 0; a < WEAPON.length; a++ ) {
System.out.print(WEAPON[a] + " ");
}
System.out.println();
System.out.println("------------");
}
// ストライカーパックを装備した場合の武装を出力(Strikerインタフェースの実装を提供)
public void printDataAile() {
for(int a = 0; a < arrayAile.length; a++ ) {
System.out.print(arrayAile[a] + " ");
}
System.out.println();
System.out.println("------------");
}
public void printDataSword() {
for(int a = 0; a < arraySword.length; a++ ) {
System.out.print(arraySword[a] + " ");
}
System.out.println();
System.out.println("------------");
}
public void printDataLauncher() {
for(int a = 0; a < arrayLauncher.length; a++ ) {
System.out.print(arrayLauncher[a] + " ");
}
System.out.println();
System.out.println("------------");
}
}
ストライクダガー
#Factoryクラスの作成
インスタンスを生成し、各メソッドを呼び出します。
Factory.java
package practice;
public class Factory {
public static void main(String[] args) {
STRIKE s = new STRIKE();
DAGGER d = new DAGGER();
s.printData();
s.list();
s.printDataPersonal();
s.printDataAile();
s.printDataSword();
s.printDataLauncher();
System.out.println();
d.printData();
d.list();
d.printDataPersonal();
d.printDataAile();
d.printDataSword();
d.printDataLauncher();
}
}
#出力結果
このように出力されました。
モビルスーツ名:ストライクガンダム
型式番号:GAT-X105
フレーム:X100系フレーム
特徴:ストライカーパックシステム
装甲:フェイズシフト装甲
全高:17.72m
重量:64.8t
武装一覧:
-------------------------
イーゲルシュテルン アーマーシュナイダー
------------
57mm高エネルギービームライフル ビームサーベル 対ビームシールド
------------
15.78m対艦刀「シュベルトゲベール」 ビームブーメラン「マイダスメッサー」 ロケットアンカー「パンツァーアイゼン」
------------
320mm超高インパルス砲「アグニ」 120mm対艦バルカン砲 350mmガンランチャー
------------
モビルスーツ名:ストライクダガー
型式番号:GAT-01A1
フレーム:X100系フレーム
特徴:ストライカーパックシステム
装甲:ラミネート装甲(胴体部のみ)
全高:18.0m
重量:57.05t
武装一覧:
-------------------------
イーゲルシュテルン 52mm機関砲ポッド ビームカービン 12.5mm対人機関銃×2
------------
57mm高エネルギービームライフル ビームサーベル 対ビームシールド
------------
15.78m対艦刀「シュベルトゲベール」 ビームブーメラン「マイダスメッサー」 ロケットアンカー「パンツァーアイゼン」
------------
320mm超高インパルス砲「アグニ」 120mm対艦バルカン砲 350mmガンランチャー
------------
以上となります。