多态
- 首先理解一下什么叫多态。同以操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性
- 多态通过派生类覆写基类中的虚函数型方法来实现。
- 多态性分为两种,一种是编译时的多态性,一种是运行时的多态性
1、编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回值类型等信息决定实现何种操作。
2、运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写需成员实现。
多态(重载与覆写的区别)
1、重载
*类中定义的方法的不同版本
public int Calculate(int x,int y)
public double Calculate(double x,double y)
*特点
- 方法名必须相同
- 参数列表必须不相同
- 返回值类型可以不相同
2、覆写
1、子类中为了满足自己的需求来重复定义某个方法的不同实现
2、通过使用override关键字来实现覆写
3、只有虚方法和抽象方法才能被覆写
4、要求(三相同)
相同的方法名称
相同的参数列表
相同的返回值类型
继承与多态
1、继承是子类使用父类的方法
2、多态是父类使用子类的方法
1
abstract public class Shape
2
{
3
public abstract int GetSides();
4
}
5
public class 园 : Shape
6
{
7
public override int GetSides()
8
{
9
return 1;
10
}
11
}
12
public class 方 : Shape
13
{
14
public override int GetSides()
15
{
16
return 2;
17
}
18
}
19
class Program
20
{
21
static void Main(string[] args)
22
{
23
Shape ss = new 方();
24
Console.WriteLine(ss.GetSides());
25
Shape pp = new 园();
26
Console.WriteLine(pp.GetSides());
27
28
}
abstract public class Shape2
{3
public abstract int GetSides();4
}5
public class 园 : Shape6
{7
public override int GetSides()8
{9
return 1;10
}11
}12
public class 方 : Shape13
{14
public override int GetSides()15
{16
return 2;17
}18
}19
class Program20
{21
static void Main(string[] args)22
{23
Shape ss = new 方();24
Console.WriteLine(ss.GetSides());25
Shape pp = new 园();26
Console.WriteLine(pp.GetSides());27

28
} 1
class Program
2
{
3
static void Main(string[] args)
4
{
5
//DVD dvd = new DVD();
6
//Console.WriteLine(dvd.PlayVideo());
7
//VCD vcd = new VCD();
8
//Console.WriteLine(vcd.PlayVideo());
9
Program tt = new Program();
10
tt.PlayVideo();
11
}
12
public void PlayVideo()
13
{
14
VideoShow vs;
15
vs = new DVD();
16
Console.WriteLine(vs.PlayVideo());
17
vs = new VCD();
18
Console.WriteLine(vs.PlayVideo());
19
20
21
}
22
}
23
abstract public class VideoShow
24
{
25
public abstract string PlayVideo();
26
27
}
28
public class VCD:VideoShow
29
{
30
public override string PlayVideo()
31
{
32
return "正在播放VCD";
33
}
34
}
35
public class DVD : VideoShow
36
{
37
public override string PlayVideo()
38
{
39
return "正在播放DVD";
40
}
41
}
class Program2
{3
static void Main(string[] args)4
{5
//DVD dvd = new DVD();6
//Console.WriteLine(dvd.PlayVideo());7
//VCD vcd = new VCD();8
//Console.WriteLine(vcd.PlayVideo());9
Program tt = new Program();10
tt.PlayVideo();11
}12
public void PlayVideo()13
{14
VideoShow vs;15
vs = new DVD();16
Console.WriteLine(vs.PlayVideo());17
vs = new VCD();18
Console.WriteLine(vs.PlayVideo());19

20
21
}22
}23
abstract public class VideoShow24
{25
public abstract string PlayVideo();26
27
}28
public class VCD:VideoShow29
{30
public override string PlayVideo()31
{32
return "正在播放VCD";33
}34
}35
public class DVD : VideoShow36
{37
public override string PlayVideo()38
{39
return "正在播放DVD";40
}41
}

浙公网安备 33010602011771号