在定义类的前面加上关键字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