最终多态体现为父类引用变量可以指向子类对象。
多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
多态的定义格式:就是父类的引用变量指向子类对象
父类类型 变量名 = new 子类类型();
变量名.方法名();
多态的优点
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- 6. 简化性
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
class Demo
5 {
6 List<Book> books = new List<Book>();
7
8 /// <summary>
9 /// 测试
10 /// </summary>
11 public void Test()
12 {
13 books.Add(new ComputerBook());
14 books.Add(new JavaBook());
15
16 foreach (Book item in books)
17 {
18 if (item is ComputerBook)
19 {
20 ((ComputerBook)item).ByReading();
21 }
22 if (item is JavaBook)
23 {
24 ((JavaBook)item).ByReading();
25 }
26 }
27 }
28 }
29
30 /// <summary>
31 /// 书类
32 /// </summary>
33 class Book
34 {
35
36 }
37
38 /// <summary>
39 /// 计算机书籍
40 /// </summary>
41 class ComputerBook : Book
42 {
43 /// <summary>
44 /// 被阅读
45 /// </summary>
46 public void ByReading()
47 {
48 Console.WriteLine("我是计算机类书籍,被在校大学生使用。");
49 }
50 }
51
52 /// <summary>
53 /// Java书籍
54 /// </summary>
55 class JavaBook : Book
56 {
57 /// <summary>
58 /// 被阅读
59 /// </summary>
60 public void ByReading()
61 {
62 Console.WriteLine("我是Java书籍,被在业Java程序员使用。");
63 }
64 }