C#-多态
作者:互联网
在派生类中重写基类的虚方法
虚方法的重写
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();
}
}
标签:Console,Name,C#,void,多态,class,age,public 来源: https://www.cnblogs.com/shazamsjtu/p/16644231.html