C#の継承とは?親クラス・子クラスの関係を基礎から学ぼう
生徒
「C#の“継承”ってよく聞くけど、どんな仕組みなんですか?」
先生
「“継承”とは、あるクラスが別のクラスの機能を受け継ぐ仕組みのことです。」
生徒
「たとえばどんなときに使うんですか?」
先生
「車や動物のように“共通の特徴”を持ったものを表現したいときに、とても便利です。具体的に見てみましょう!」
1. C#の継承とは?
継承(けいしょう)とは、親クラス(スーパークラス)の機能を、子クラス(サブクラス)が受け継ぐ仕組みです。C#では、共通の処理や性質をまとめた「親クラス」を作って、それを「子クラス」が引き継ぐことで、コードを効率的に書けるようになります。
たとえば、「動物」という親クラスを作って、「犬」や「猫」という子クラスがその特徴を引き継ぐ、というようなイメージです。
2. クラスとは何かをおさらい
「クラス」とは、モノの設計図のようなものです。たとえば「人間」というクラスを作れば、「名前」や「年齢」といった情報(=プロパティ)や、「話す」「歩く」といった行動(=メソッド)を記述することができます。
そして、クラスから作られた実体のことをオブジェクトと呼びます。
3. 継承の基本構文
C#で継承を使うには、クラス定義のときに「:(コロン)」を使って、親クラスを指定します。
class 親クラス名
{
// 共通の機能やプロパティ
}
class 子クラス名 : 親クラス名
{
// 子クラス独自の機能
}
4. 実例で学ぶ:動物クラスの継承
ここでは、「Animal(動物)」という親クラスを作り、「Dog(犬)」という子クラスがその機能を継承する例を紹介します。
class Animal
{
public void Breathe()
{
Console.WriteLine("呼吸しています。");
}
}
class Dog : Animal
{
public void Bark()
{
Console.WriteLine("ワンワン!");
}
}
class Program
{
static void Main()
{
Dog myDog = new Dog();
myDog.Breathe(); // 親クラスのメソッド
myDog.Bark(); // 子クラスのメソッド
}
}
このコードでは、「Dog」クラスは「Animal」クラスを継承しているため、「Breathe」メソッド(呼吸する)が使えるようになっています。
呼吸しています。
ワンワン!
5. なぜ継承を使うのか?
継承を使うことで、重複したコードを減らすことができます。また、プログラムの構造が整理され、メンテナンスがしやすくなるというメリットもあります。
例えば、「猫」や「鳥」など他の動物クラスを作るときも、「Animal」クラスを継承すれば、呼吸の処理を何度も書かずに済みます。
6. 子クラスで親クラスの機能を追加・変更する
子クラスでは、親クラスで定義された機能を拡張したり、上書き(オーバーライド)したりすることもできます。
親クラスのメソッドを上書きするには、メソッドにvirtualをつけて、子クラスでoverrideを使います。
class Animal
{
public virtual void Speak()
{
Console.WriteLine("何かを話します。");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("ワンワン!");
}
}
このようにすることで、「Dog」クラスは親の「Speak」メソッドを独自の内容で書き換えることができます。
7. 親クラスのコンストラクタを使う
コンストラクタ(※オブジェクトを作るときに呼ばれる特別なメソッド)も継承できます。子クラスで親クラスのコンストラクタを呼びたい場合は、baseキーワードを使います。
class Animal
{
public Animal()
{
Console.WriteLine("Animalのコンストラクタが呼ばれました。");
}
}
class Dog : Animal
{
public Dog()
{
Console.WriteLine("Dogのコンストラクタが呼ばれました。");
}
}
Animalのコンストラクタが呼ばれました。
Dogのコンストラクタが呼ばれました。
8. C#の継承で覚えておきたいポイント
- クラスの継承は1つの親クラスからのみ可能(単一継承)
: 親クラス名で継承するvirtualとoverrideでメソッドの上書きができるbaseで親クラスのコンストラクタやメソッドを呼べる
これらを覚えておくことで、C#のオブジェクト指向プログラミングの基本をしっかりと身につけられます。
まとめ
C#における継承は、コードの重複を避けながら、共通する処理や特性を効率的に再利用できる非常に重要な仕組みです。特に「親クラス」と「子クラス」の関係を正しく理解することで、プログラム全体をより読みやすく、メンテナンスしやすくすることができます。
実際の開発では、「動物」「乗り物」「社員」など、共通の特徴を持つオブジェクトを扱う場面が多くあります。そのとき、共通する機能を親クラスにまとめておき、個別の違いを子クラスで表現することで、柔軟性の高い設計が可能になります。
また、virtualとoverrideを使えば、親クラスの動作を必要に応じて子クラスで変更することができ、さらにbaseを使って親クラスのコンストラクタやメソッドを明示的に呼び出すことも可能です。
継承の活用例:動物と猫のクラス
class Animal
{
public virtual void Speak()
{
Console.WriteLine("何かの声を出しています。");
}
}
class Cat : Animal
{
public override void Speak()
{
Console.WriteLine("ニャー!");
}
}
class Program
{
static void Main()
{
Animal myCat = new Cat();
myCat.Speak(); // 結果:ニャー!
}
}
このコードでは、Animalクラスを継承したCatクラスが、Speakメソッドを上書きしています。実行時には、CatクラスのSpeakが呼ばれ、「ニャー!」と表示されます。このように、多態性(ポリモーフィズム)を使った拡張性のあるコードも継承の大きな魅力です。
C#の継承は、一見難しそうに見えるかもしれませんが、使い方を丁寧に理解していくことで、現実世界のモノや動作を自然にプログラムで表現できるようになります。これからもいろいろな継承の使い方を試してみましょう。
生徒
「継承って、最初はよく分からなかったけど、親クラスと子クラスの関係で例えると分かりやすかったです!」
先生
「そうですね。現実の世界に置き換えると、たとえば“動物”を親にして、“犬”や“猫”を子にすることで、共通の機能を一度だけ書けるのが継承の強みなんです。」
生徒
「overrideやbaseもすごく便利ですね!親の機能を使いながら、必要に応じて書き換えられるって、かなり自由度が高い気がします。」
先生
「その通りです。継承をうまく使えば、コードの整理もしやすくなりますし、再利用性もグッと高まります。これからもどんどん活用していきましょう!」