1.抽象類
特徵:
1.被abstract修飾
2.不能直接實例化
3.不能用Sealed或者private或者protected修飾
4.包含抽象方法,也可包含非抽象方法
5.抽象方法沒有方法體,且必須非私有
6.子類繼承抽象類,必須重寫所有非私有抽象方法
舉個栗子:
定義一個人類的抽象類
abstract class Person
{
private int age=12;
public int Age
{
get { return age; }
set { age = value; }
}
public string name = "張三";
protected abstract void Speak();//說話
public abstract string Eat(string foodName);//喫
}
派生類繼承抽象類
class Chinese : Person
{
protected override void Speak()
{
Console.WriteLine("我說中文");
}
public override string Eat(string foodName)
{
return foodName;
}
}
測試結果:
static void Main()
{
Chinese chinese = new Chinese();//實例化派生類
Person person = chinese;//也可以將對象賦值給父類
int age = chinese.Age;
Console.WriteLine("年齡:{0},姓名:{1},食物:{2}",age,chinese.name,chinese.Eat("餃子"));
Console.ReadKey();
}
2.接口
特徵:
1.接口成員總是共有的,所以申明是不允許使用修飾符,即使public
2.可多繼承接口,用,隔開
3.接口方法沒有方法體
4.成員不能有字段,意思是成員不能以;結尾
5.不能直接實例化
同樣舉個栗子:
接口1
interface Interface1
{
int Add();//加法
}
接口2
interface Interface2
{
int Add();
int a{get;set;}
}
實現兩個接口
class Chinese : Person,Interface2,Interface1
{
public int Add()
{
a = 6;
return a;
}
int A;
public int a
{
get { return A; }
set { A = value; }
}
}
3.區別
3.1相同點
1.都不能直接實例化
2.抽象方法和接口方法都沒有方法體
3.派生類必須實現全部抽象成員、接口成員
3.2不同點
1.(抽象)類可以實現一個或多個接口,接口不能繼承類。
2.接口不能申明字段,抽象類可以
3.派生類必須實現接口所有成員,但只需重寫抽象類的抽象方法
4.抽象類屬於類,有構造方法和析構函數。接口沒有
5.抽象類方法簽名可以是protected或者public。接口方法隱式爲public
6.抽象類可以有靜態方法
7.抽象類主要用於關係密切的對象;而接口適合爲不相關的類提供通用功能。