インターフェースとは?
インターフェースとは、
「こういうメソッドを持つべき」という約束だけを定義するものです。
クラスが「実際の処理」を持つのに対して、
インターフェースは「設計書」のような役割をします。
具体的な例
たとえば、「動物が鳴く」という共通の動作を持つ設計。
interface IAnimal
{
void Speak();
}
この IAnimal インターフェースは「Speak() メソッドを持つこと」を約束しています。
でも、中身の実装(何を出力するか)は書かれていません。
クラスでインターフェースを実装する
このインターフェースを使いたいクラスは、interface を 実装 します。
class Dog : IAnimal
{
public void Speak()
{
Console.WriteLine("ワンワン!");
}
}
class Cat : IAnimal
{
public void Speak()
{
Console.WriteLine("ニャー!");
}
}
Dog と Cat はどちらも IAnimal を実装しています。
つまり、「Speak()メソッドを必ず持つ」という契約を守っているわけです。
実行
IAnimal dog = new Dog();
dog.Speak(); // 出力: ワンワン!
IAnimal cat = new Cat();
cat.Speak(); // 出力: ニャー!
変数の型はどちらも IAnimal ですが、
中身が Dog か Cat かによって動作が変わります。
このように、インターフェースを通して共通の処理を扱えるのがポイント。
インターフェースのメリット
インターフェースを使うことで、クラス同士が「ゆるくつながる」ようになります。
たとえば、こんなコードを書いてもOK
void MakeItSpeak(IAnimal animal)
{
animal.Speak();
}
このメソッドは、Dog でも Cat でも Bird でも、
IAnimal を実装していれば全部渡せます。
つまり、柔軟で拡張性の高いコードになるんです!
クラスの継承との違い
| 項目 | 継承(class) | インターフェース(interface) |
|---|---|---|
| 目的 | 機能を引き継ぐ | 共通のルールを定める |
| 中身 | 実装を含む | 実装は書けない |
| 継承数 | 1つまで(単一継承) | 複数実装OK(多重実装) |
つまり、
「機能を共有したい → 継承」
「ルールだけ共有したい → インターフェース」
と覚えておけばOKです。
複数インターフェースの実装
インターフェースは複数実装できます。
interface IAnimal
{
void Speak();
}
interface IRun
{
void Run();
}
class Dog : IAnimal, IRun
{
public void Speak() => Console.WriteLine("ワンワン!");
public void Run() => Console.WriteLine("走る!");
}
これで、Dog は「鳴けて走れる」動物になりました。
まとめ
| 用語 | 意味 |
|---|---|
| interface | ルールを定義する |
| class | 実際の動作を実装する |
インターフェースは「コードの設計力」を高める重要な仕組みです。