0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity-C# における Inheritance(継承)とは?

Posted at

Unity C# における Inheritance(継承)とは?

Inheritance(継承)とは?

C# における継承(Inheritance)は、あるクラスが別のクラスの機能を引き継ぐ(再利用する)仕組み です。継承を使うことで、コードの再利用性が向上し、オブジェクト指向プログラミングの基本である「共通の振る舞いを持つクラス」を作ることができます。

Unity では、例えば MonoBehaviour を継承することで、Unity の Update()Start() などのメソッドを使用できるようになります。


基本的な継承の書き方

// 基本クラス(親クラス)
public class Animal
{
    public string name;
    public void Speak()
    {
        Debug.Log(name + " is making a sound.");
    }
}

// 派生クラス(子クラス)
public class Dog : Animal
{
    public void Bark()
    {
        Debug.Log(name + " is barking!");
    }
}

// 使い方
Dog myDog = new Dog();
myDog.name = "Buddy";
myDog.Speak(); // Buddy is making a sound.
myDog.Bark();  // Buddy is barking!

Dog クラスは Animal クラスを継承しているため、Speak() メソッドを使用できます。


Protected 修飾子

protected とは?

protected は、そのクラス自身と、継承した子クラスからのみアクセスできるメンバー を定義する修飾子です。

public class Animal
{
    protected string species = "Unknown";
    
    protected void DisplaySpecies()
    {
        Debug.Log("Species: " + species);
    }
}

public class Dog : Animal
{
    public void ShowInfo()
    {
        DisplaySpecies(); // 継承したクラスからはアクセス可能
    }
}

Dog myDog = new Dog();
myDog.ShowInfo(); // Species: Unknown

🚫 myDog.species には直接アクセスできません(protected は外部からアクセス不可)。


Override と Abstract(仮想メソッドと抽象メソッド)

Override(オーバーライド)とは?

override は、親クラスのメソッドを子クラスで上書き(オーバーライド)する ためのキーワードです。継承元のクラスで virtual キーワードを使ってメソッドを宣言し、子クラスで override することで、異なる振る舞いを実装できます。

public class Animal
{
    public virtual void Speak()
    {
        Debug.Log("Animal is making a sound.");
    }
}

public class Dog : Animal
{
    public override void Speak()
    {
        Debug.Log("Dog is barking!");
    }
}

Animal myAnimal = new Animal();
myAnimal.Speak(); // Animal is making a sound.

Dog myDog = new Dog();
myDog.Speak(); // Dog is barking!

virtual を使うことで、子クラスで override してメソッドの動作を変更可能。


Abstract(抽象メソッドと抽象クラス)

abstract は、基底クラスで定義し、派生クラスで必ず実装しなければならないメソッド を示すキーワードです。abstract メソッドは本体を持たず、子クラスで override して具体的な動作を実装する必要があります。

また、抽象メソッドを持つクラスは abstract キーワードを使って 抽象クラス にする必要があります。

public abstract class Animal
{
    public abstract void Speak(); // 抽象メソッド(実装なし)
}

public class Dog : Animal
{
    public override void Speak()
    {
        Debug.Log("Dog is barking!");
    }
}

// Animal myAnimal = new Animal(); // エラー(抽象クラスは直接インスタンス化できない)
Dog myDog = new Dog();
myDog.Speak(); // Dog is barking!

abstract を使うと、共通のインターフェースを定義でき、子クラスで必ず実装させることができる。


まとめ

継承の重要なキーワードと使い方

キーワード 役割 使い方
protected 継承したクラスからのみアクセス可能なメンバーを定義 親クラス内の変数やメソッドを子クラス専用にする
override 親クラスの virtual メソッドを上書きする 子クラスで異なる動作を実装したいときに使う
abstract 抽象クラスや抽象メソッドを定義し、子クラスで必ず実装させる 親クラスの機能を強制的に継承させたいときに使う

継承を活用することで、共通の機能をまとめつつ、派生クラスごとに異なる動作を実装できます。特に abstract を使うことで設計の統一感を持たせることが可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?