在派生类中重写基类的虚方法
public virtual void Move() { } public override void Move() { } class Vehicle { string name; //定义字段 public string Name //定义属性为字段赋值 { get { return name; } set { name = value; } } public virtual void Move() //定义方法输出交通工具的形态 { Console.WriteLine("{0}都可以移动", Name); } } class Train : Vehicle { public override void Move() //重写方法输出交通工具形态 { Console.WriteLine("{0}在铁轨上行驶", Name); } } class Car : Vehicle { public override void Move() //重写方法输出交通工具形态 { Console.WriteLine("{0}在公路上行驶", Name); } } class Program { static void Main(string[] args) { Vehicle vehicle = new Vehicle(); //创建Vehicle类的实例 Train train = new Train(); //创建Train类的实例 Car car = new Car(); //创建Car类的实例 //使用基类和派生类对象创建Vehicle类型数组 Vehicle[] vehicles = { vehicle, train, car }; vehicle.Name = "交通工具"; //设置交通工具的名字 train.Name = "火车"; //设置交通工具的名字 car.Name = "汽车"; //设置交通工具的名字 vehicles[0].Move(); //输出交通工具的形态 vehicles[1].Move(); //输出交通工具的形态 vehicles[2].Move(); //输出交通工具的形态 Console.ReadLine(); } }
访问修饰符 abstract class 类名 : 基类或接口 { //类成员 public abstract void AbsMethod();//抽象方法 } public abstract class Market { public string Name { get; set; }//商场名称 public string Goods { get; set; }//商品名称 public abstract void Shop();//抽象方法,用来输出信息 } public class WallMarket : Market//继承抽象类 { public override void Shop()//重写抽象方法 { Console.WriteLine(Name + "购买" + Goods); } } public class TaobaoMarket : Market//继承抽象类 { public override void Shop()//重写抽象方法 { Console.WriteLine(Name + "购买" + Goods); } } class Program { static void Main(string[] args) { Market market = new WallMarket();//使用派生类对象创建抽象类对象 market.Name = "沃尔玛"; market.Goods = "七匹狼西服"; market.Shop(); market = new TaobaoMarket();//使用派生类对象创建抽象类对象 market.Name = "淘宝"; market.Goods = "韩都衣舍花裙"; market.Shop(); Console.ReadLine(); } }
抽象类不能直接实例化,不能被密封
修饰符 interface 接口名称 : 继承的接口列表 { 接口内容; }
接口只能定义,不能实例化,接口成员永远是公共的(前面要加public)。一个类可以继承多个接口。接口中不能有字段。
interface IPerson//定义IPerson接口 { string Name { get; set; }//姓名属性 int Age { get; set; }//年龄属性 void Speek();//说话行为 void Work();//工作行为 } class Student : IPerson//定义学生类,继承自IPerson接口 { public string Name { get; set; }//实现Name属性 private int age;//定义age字段,用来表示年龄 public int Age//实现Age属性 { get { return age; } set { if (age > 0 && age < 120)//控制输入范围 { age = value; } } } public void Speek()//实现Speek方法 { Console.WriteLine(Name + ":老师好"); } public void Work()//实现Work方法 { Console.WriteLine(Name + "同学开始记笔记"); } } class Teacher : IPerson//定义老师类,继承自IPerson接口 { public string Name { get; set; }//实现Name属性 private int age;//定义age字段,用来表示年龄 public int Age//实现Age属性 { get { return age; } set { if (age > 0 && age < 120)//控制输入范围 { age = value; } } } public void Speek()//实现Speek方法 { Console.WriteLine(Name + ":同学们好"); } public void Work()//实现Work方法 { Console.WriteLine(Name + "老师开始上课"); } } class Program { static void Main(string[] args) { //使用派生类对象创建接口数组 IPerson[] person = new IPerson[] { new Student(), new Teacher() }; person[0].Name = "peter";//为学生姓名赋值 person[0].Age = 20;//为学生年龄赋值 person[1].Name = "mike";//为老师姓名赋值 person[1].Age = 40;//为老师年龄赋值 person[0].Speek();//学生的说话行为 person[1].Speek();//老师的说话行为 Console.WriteLine();//换行 person[1].Work();//老师的工作行为 person[0].Work();//学生的工作行为 Console.ReadLine(); } }