インターフェイス(interface)と抽象クラス(abstract class)、どっち使う?

インターフェイス

interface ICloneable

{

object Clone();

}

 

class Employee : ICloneable

{

private string name;

 

public string Name{

get{return name;}

set{name = value;}

}

public object Clone()

{

return new Employee(Name);

}

}

 

抽象クラス

abstract class Person

{

private string name;

public string Name{

get{return name;}

set{name = value;}

}

public Person(string name)

{Name = name;}

 

public abstract void DoSomething();

}

 

class Employee : Person

{

public Employee(string name) : base(name){}

public override void DoSomething()

{ /* do good job. */ }

}

 

 

 

抽象クラスは、実装を持つこともできる。上記の例でいうと、name や Name や Person(string name)。

interface は、実装が持てない。

抽象クラスは、二つ以上継承できない。つまり、多重継承できない。

interface は、二つ以上でも継承できる。

 

http://blog.shos.info/archives/2005/02/c_tips_interface_abstract_clas.html

 

 

抽象クラスの方が、決まっている関数や変数をどう使うかという感じでわかりやすい気がする。浅いかな。