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
を使うことで設計の統一感を持たせることが可能です。