接口和抽象类的定义和区别,可以查看博主anytao的博客https://www.cnblogs.com/anytao/archive/2007/04/12/must_net_02.html
接口:一般是用来定义行为方式
public interface IAction { //定义行为方式移动 void Move(); }
抽象类:一般是用来定义共同特征
public abstract class Similarity { //定义字段 protected string _name; //声明抽象属性 public abstract string Name { get; } //声明一个抽象方法 public abstract void Color(); //实现一个虚方法 public virtual void Head() { Console.WriteLine(_name+"有一个脑袋"); } //实现一个普通方法 public void Eyes() { Console.WriteLine(_name+"有2只眼睛"); } }
实现抽象类和接口
public class Rabbit : Similarity,IAction { public override string Name { get { return _name; } } public Rabbit(string name) { _name = name; } public void Move() { Console.WriteLine(_name+"奔跑!"); } public override void Color() { Console.WriteLine(_name+"灰色"); } }
客户端实现
static void Main(string[] args) { Rabbit rabbit = new Rabbit("兔子"); rabbit.Color(); rabbit.Move(); rabbit.Head(); rabbit.Eyes(); }
结果:
兔子灰色
兔子奔跑!
兔子有一个脑袋
兔子有2只眼睛
注意:抽象类的虚方法重写不是必须的,可以选择重写。重写之后会替换掉原来的方法。