一、抽象类
1. 抽象类的定义
使用abstract修饰符修饰的类只能用作基类,该类就称为抽象类。
2. 抽象类的作用
抽象类本身不能产生实例对象。
3. 抽象类与非抽象类的区别
?抽象类只能作为其它类的基类,它不能被直接实例化,也不能使用new运算符。抽象类如果含有抽象的变量和值,则它们要么是null类型,要么包含了对非抽象类的实例的引用。这里的非抽象类必须是从抽象类派生的。
?抽象类允许包含抽象成员,但不是必须的。
?抽象类不能被密封。
?抽象类可以包含抽象方法和访问器。
4. 示例
如果一个非抽象类从抽象类中派生,则其必须通过重写override关键字来实现所有继承而来的抽象成员。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
public abstract class A // 抽象类
{
private string name;
private int age;
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public abstract void show(); // 抽象方法
}
public class B : A // 派生类
{
public override void show() // 重写抽象类中的show方法
{
Console.WriteLine("name:{0} age:{1}", Name, Age);
}
}
static void Main(string[] args)
{
// C#抽象类-www.baike369.com
B b = new B(); // 实例化派生类
A a = b; // 使用派生类的对象b来实例化抽象类
a.Name = "BaiXue"; // 使用抽象类对象访问抽象类中的name属性
a.Age = 18; // 使用抽象类对象访问抽象类中的age属性
a.show(); // 使用抽象类对象调用抽象类中的抽象方法
Console.ReadLine();
}
}
}
运行结果:
name:BaiXue age:18
上述代码通过派生类B的对象b来实例化抽象类,然后使用抽象类A的对象a来访问抽象类中的属性和方法。
二、抽象方法
抽象类包含了一个以上的抽象方法,这些抽象方法只是提供函数名称,函数体由继承的派生类实现,派生类必须同时实现所有抽象类的方法,否则其本身将会成为另外一个抽象类。
抽象方法也是在抽象类中由abstract修饰符声明的,它不能使用static或virtual修饰符,而且方法不能有任何可执行代码。如:
public abstract void show(); // 抽象类中的抽象方法在派生类中使用override关键字来重载抽象类(基类)所定义的方法。如:
public override void show() // 重写抽象类中的show方法
{
Console.WriteLine("name:{0} age:{1}", Name, Age);
}
如果一个方法被声明为抽象的,那么该方法默认也是一个虚方法。事实上,抽象方法是一个新的虚方法,它不提供具体的方法实现代码。
抽象方法在派生类中不能使用base关键字进行访问。