什么是抽象类?
如果一个类不与具体的事物相联系,而是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类。在抽象类中声明方法时,如果加上abstract关键字,则为抽象方法。
是不是感觉跟没说一样,别慌,往下看
抽象类
1.抽象类不能直接实例化。(就是不能new)
2.抽象类中可以包含抽象成员,但非抽象类中不可以(抽象里面才能有抽象成员)
3.抽象类不能被密封(abstract和sealed不会同时出现)
抽象方法
声明抽象方法时,只需在其前加上abstract关键字就ok了。声明抽象方法注意事项:
1。抽象方法必须声明在抽象类中(就是前面我们所说的抽象成员只能在抽象类中)
2.声明抽象方法时,不能使用virtual,static和private修饰符。
抽象方法声明引入一个新方法,但不提供该方法的实现,由于抽象方法不提供任何实际实现,因此抽象方法的方法体只包含一个分号。
例:
public abstract class myAbstract
{
public abstract void method;//抽象方法
}
当抽象类派生一个非抽象类时,需要在非抽象类中重写抽象方法,以提供具体的实现。重写方法时,使用overrider关键字
抽象类和抽象方法的使用
namespace Test04
{
public abstract class myClass
{
private string id = "";
private string name = "";
/// <summary>
/// 编号属性及实现
/// </summary>
public string ID
{
get
{
return id;
}
set
{
id = value;
}
}
/// <summary>
/// 姓名属性及实现
/// </summary>
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
/// <summary>
/// 抽象方法,用来输出信息
/// </summary>
public abstract void ShowInfo();
}
public class DriveClass : myClass //继承抽象类
{
/// <summary>
/// 重写抽象类中输出信息的方法
/// </summary>
public override void ShowInfo()
{
Console.WriteLine(ID + " " + Name);
}
}
class Program
{
static void Main(string[] args)
{
DriveClass driveclass = new DriveClass(); //实例化派生类
myClass myclass = driveclass; //使用派生类对象实例化抽象类
myclass.ID = "BH0001"; //使用抽象类对象访问抽象类中的编号属性
myclass.Name = "TM"; //使用抽象类对象访问抽象类中的姓名属性
myclass.ShowInfo(); //使用抽象类对象调用派生类中的方法
}
}
}
abstract不能直接实例化,上例中注意
DriveClass driveclass = new DriveClass(); //实例化派生类
myClass myclass = driveclass; //使用派生类对象实例化抽象类