講義メモ:文法編

【文法編】抽象クラス(準備)

・以前作成した mini133.cs を用いる

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
class Slime { //スライムクラスの定義(mini133クラスが利用する部品クラス)
    public int hp; //HP
    public string name; //名前
    public virtual void show() { //名前とHPを出力するメソッド(オーバーライド可)
        Debug.Log("名前:" + name + ",HP:" + hp);
    }
}
class HoimiSlime : Slime { //ホイミスライムクラスの定義(スライムを継承)
    // public int hp; //HPが継承される
    // public string name; //名前が継承される
    // public void show() { //名前とHPを出力するメソッドが継承される
    //  Debug.Log("名前:" + name + ",HP:" + hp);
    // }
    public int mp; //MPを追加
    public override void show() { //名前とHPとMPを出力するメソッドにしてオーバーライド
        Debug.Log("名前:" + name + ",HP:" + hp + ",MP:" + mp);
    }
}
public class mini133 : MonoBehaviour { //Unityでの実行用クラス
    void Start() { //Unityシステムから開始時に呼び出されるメソッド
        Slime Rimuru = new Slime(); //スライムクラスからオブジェクトを生成
        Rimuru.hp = 100; //HPをセット
        Rimuru.name = "リムル"; //名前をセット
        Rimuru.show(); //名前とHPを出力するメソッドを呼ぶ

        HoimiSlime Hoimin = new HoimiSlime(); //ホイミスライムクラスからオブジェクトを生成
        Hoimin.hp = 10; //HPをセット
        Hoimin.mp = 500; //HPをセット
        Hoimin.name = "ホイミン"; //名前をセット
        Hoimin.show(); //名前とHPとMPを出力するメソッドを呼ぶ

        Slime[] slimes = { Rimuru, Hoimin }; //スライムの配列に格納する
        slimes[0].show(); //[0]であるRimuruの名前とHPを表示
        slimes[1].show(); //[1]であるHoiminの名前とHPを表示
    }
    void Update() {

    }
}

【文法編】抽象クラス

・多くのクラスの基本クラスとなるクラスを設計すると「具体的なことは派生クラスで決める」場合が増える
・また「車」や「家」では実体が作れないように、基本クラスはインスタンスの生成には向かなくなる
・このような場合、基本クラスを抽象クラスとして作っておけば良い
・書式: abstract class クラス名 {…}

アレンジ演習:mini133.cs

・Slimeクラスの基本クラスとして、Monsterという抽象クラスを定義しよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
abstract class Monsters { } //【追加】抽象クラスであるモンスタークラス
class Slime : Monsters { //【変更】スライムクラスの定義(モンスターを継承)
    public int hp; //HP
    public string name; //名前
    public virtual void show() { //名前とHPを出力するメソッド(オーバーライド可)
        Debug.Log("名前:" + name + ",HP:" + hp);
    }
}
class HoimiSlime : Slime { //ホイミスライムクラスの定義(スライムを継承)
    // public int hp; //HPが継承される
    // public string name; //名前が継承される
    // public void show() { //名前とHPを出力するメソッドが継承される
    //  Debug.Log("名前:" + name + ",HP:" + hp);
    // }
    public int mp; //MPを追加
    public override void show() { //名前とHPとMPを出力するメソッドにしてオーバーライド
        Debug.Log("名前:" + name + ",HP:" + hp + ",MP:" + mp);
    }
}
public class mini133 : MonoBehaviour { //Unityでの実行用クラス
    void Start() { //Unityシステムから開始時に呼び出されるメソッド
        Slime Rimuru = new Slime(); //スライムクラスからオブジェクトを生成
        Rimuru.hp = 100; //HPをセット
        Rimuru.name = "リムル"; //名前をセット
        Rimuru.show(); //名前とHPを出力するメソッドを呼ぶ

        HoimiSlime Hoimin = new HoimiSlime(); //ホイミスライムクラスからオブジェクトを生成
        Hoimin.hp = 10; //HPをセット
        Hoimin.mp = 500; //HPをセット
        Hoimin.name = "ホイミン"; //名前をセット
        Hoimin.show(); //名前とHPとMPを出力するメソッドを呼ぶ

        Slime[] slimes = { Rimuru, Hoimin }; //スライムの配列に格納する
        slimes[0].show(); //[0]であるRimuruの名前とHPを表示
        slimes[1].show(); //[1]であるHoiminの名前とHPを表示
    }
    void Update() {

    }
}

【文法編】抽象クラスの抽象メソッド

・抽象クラスには名前だけのメソッドを定義できる
・これにより「わが一族であれば、このメソッドを持つべきだ」というルールを設定して、派生クラスに守らせることができる
・また、派生クラスを利用する側も「この抽象クラスの派生クラスだから、このメソッドがあるはず」と理解できる
・例: Monstersクラスの一族はshowメソッドを持つこと
・書式: public abstract 戻り値型 メソッド名(引数リスト); //中カッコの代わりにセミコロン

提出:アレンジ演習:mini133.cs

・Monstersクラスに抽象メソッドpublic abstract void show(); を追記しよう
・Slimeクラスではこのメソッドをオーバーライドしよう

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です