インターフェースとは
具体的な処理の内容は書かず、クラスが実装すべき規約(そのメソッドで何を呼び出すことが出来るのか)を定めるもの。つまり、クラスでどんなメソッドを実装する必要があるかという構造だけを定めた、論理的な存在。
存在価値は?
・「このインターフェースを使うときはこのメソッドの中身を必ず作ってね!」とか、「そのメソッドには、必ずこんな引数を渡してね!」などとメソッドの実装を強制できる。
・複数のクラスが同じインターフェースについて、それぞれ異なる処理内容を実装することが出来る。(ポリモーフィズム)
使用例
interfaceの定義例
public interface ISeriees {
int GetNext();
void Reset();
void SetStart(int x);
}
見てわかる通り、どのメソッドにも処理は実装されていない。その代わりに、インターフェースを実装するクラスでは、そのインターフェースに含まれるすべてのメソッドを実装する必要がある。
interfaceを実装するクラスの例
class ByTwos : ISeries {
int start;
int val;
public ByTwos()
{
start = 0;
val = 0;
}
public int GetNext()
{
val += 2;
return val;
}
public void Reset()
{
start = 0;
val = 0;
}
public void SetStart(int x)
{
start = x;
val = x;
}
}
定義したインターフェースを1つ以上のクラスに実装することができる。注意したいのは、継承と混同しないこと。ByTwosクラスはISeriesクラスを継承しているのではなく、ISeriesインターフェースを実装していると言える。また、ByTwosクラスが3つすべてのメソッドを実装していることからも分かる通り、インターフェースで定義したすべてのメンバーを実装する必要がある。いくつかのメソッドだけを使うといったことはできない。これは使う人それぞれがバラバラな使い方をしてしまうのを防ぐためだ。