在定義類的前面加上關鍵字abstract,那麼這個類就是抽象類了,抽象類本身無法產生實例對象,而且抽象類包含了一個以上的抽象方法,這些方法只是提供函數名稱,並沒有定義如何具體實現,由繼承的派生類實現,派生類同時必須實現所有抽象類的方法,否則其本身將成爲另外一個抽象類。需要我們注意的一點是,當派生類重寫抽象類的方法時,要使用override關鍵字來重寫抽象類所定義的方法。
下面我們就來通過範例來理解抽象類的應用。
範例一
代碼如下:
using System;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要說明。
/// </summary>
class Class1
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
B b=new B();
b.show0();
b.show();
}
}
abstract class A
{
public void show0()
{
Console.WriteLine("abstract class");
}
abstract public void show();
}
class B :A
{
public override void show()
{
Console.WriteLine("the class B");
}
}
}
運行結果
abstract class
the class B
Press any key to continue
範例二
代碼如下:
using System;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要說明。
/// </summary>
class Class1
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
caculator c=new caculator(6,2);
c.getresult();
}
}
abstract class template
{
protected int a;
protected int b;
public template(int a,int b)
{
this.a=a;
this.b=b;
}
public void getresult()
{
add(a,b);
sub(a,b);
mul(a,b);
div(a,b);
}
abstract protected void add(int a,int b);
abstract protected void sub(int a,int b);
abstract protected void mul(int a,int b);
abstract protected void div(int a,int b);
}
class caculator :template
{
public caculator(int a,int b):base(a,b){}
protected override void add(int a,int b)
{
int r=a+b;
Console.WriteLine("{0}+{1}={2}",a,b,r);
}
protected override void sub(int a, int b)
{
int r=a-b;
Console.WriteLine("{0}-{1}={2}",a,b,r);
}
protected override void mul(int a, int b)
{
int r=a*b;
Console.WriteLine("{0}*{1}={2}",a,b,r);
}
protected override void div(int a, int b)
{
if(b==0)
{
Console.WriteLine("input error");
}
else
{
int r;
r=a/b;
Console.WriteLine("{0}/{1}={2}",a,b,r);
}
}
}
}
運行結果
6+2=8
6-2=4
6*2=12
6/2=3
Press any key to continue