C#基础知识整理:基础知识(6) 抽象类和抽象方法
在实际项目中,当我们设计一个父类时,经常会遇到这个类不能确定它的具体执行流程的。比如我设计一个文件类:
[csharp]
public class AFile
{
private string name = string.Empty;
private string path = string.Empty;
private FileType type = FileType.IsUnknown;
public string Name
{
get
{
return name;
}
}
public string Path
{
get
{
return path;
}
}
public FileType Type
{
get { return type; }
}
public AFile(string name, string path, FileType type)
{
this.name = name;
this.path = path;
this.type = type;
}
public void Copy(string destPath)
{
//不知道怎么写,因为可能是文件还可能是文件夹,如果是压缩的还要解压
}
}
public enum FileType
{
IsUnknown = 0,//类型不明
IsFile = 1,//文件
IsDirectory =2,//文件夹
IsCompression//压缩的
}
public class AFile
{
private string name = string.Empty;
private string path = string.Empty;
private FileType type = FileType.IsUnknown;
public string Name
{
get
{
return name;
}
}
public string Path
{
get
{
return path;
}
}
public FileType Type
{
get { return type; }
}
public AFile(string name, string path, FileType type)
{
this.name = name;
this.path = path;
this.type = type;
}
public void Copy(string destPath)
{
//不知道怎么写,因为可能是文件还可能是文件夹,如果是压缩的还要解压
}
}
public enum FileType
{
IsUnknown = 0,//类型不明
IsFile = 1,//文件
IsDirectory =2,//文件夹
IsCompression//压缩的
}
这是一个父类,它的copy方法,应该怎么写呢?因为文件存在四种状态甚至后来根据需要还可能再加,针对不同的文件类型,拷贝方法是不一样的,而且根据项目需要还可能针对某种文件做一些特殊处理。这样再设计这个父类时就不能对copy方法写代码,只需要谁继承它谁就重写这个方法,根据需要写不同的执行代码。
这样,一个类具有某个方法,但是该方法没有具体执行过程,这样的方法称之为“抽象方法”。
上面的AFile类中Copy方法就叫抽象方法,但是随之有一个问题,如果实例化了这个AFile类,Copy方法也就是这个对象的行为了,但实际上Copy方法还不确定。这样不符合客观事物规律。因此,这个类是不能被实例化的,也就是说当类中有抽象方法时,这个类不能被实例化,这样的类称之为“抽象类”。抽象不能被实例化,但它还是类。抽象类和抽象方法用abstract关键字修饰。
可以看到,抽象类中就存在了两种方法:抽象方法和非抽象方法。
非抽象方法,抽象类被继承,子类拥有非抽象方法,可以直接使用,也可以重写覆盖。
抽象类,必须覆盖重写。
修改上述的文件类:
[csharp]
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace YYS.CSharpStudy.MainConsole
{
public abstract class AFile
{
private string name = string.Empty;
private string path = string.Empty;
private FileType type = FileType.IsUnknown;
public string Name
{
get
{
return name;
}
&nbs
补充:软件开发 , C# ,