• C#第七天


    1.继承:我们可能会在一些类中,写一些重要的成员,将这些重复的成员单独的封装到一个类中,作为这些类的父类。

    Student    Teacher     Driver                             子类     也叫派生类

    Person                                                            父类     也叫基类

    子类继承了父类,那么子类从父类那里继承过来了什么

    首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。

    2.子类不能继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。

    所以,如果父类中重新写了一个有参数的构造函数之后,那么无参数的就被干掉了。

    子类就掉用不到了,所以子类会报错。

    解决方法:

    1.在父类中重新写一个无参数的构造函数。

    2.在子类中显示父类的构造函数,使用关键字:base()

    3.继承的特性

    1).继承的单根性:一个子类只能继承继承一个父类。

    2).继承的传递性。

    4. object是所有类的基类。

    5.new关键字
    1)、创建对象
    2)、隐藏从父类那里继承过来的同名成员。
    隐藏的后果就是子类调用不到父类的成员。

    里氏转换法:

    1、里氏转换
    1)、子类可以赋值给父类
    2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。

    2、
    子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。

    3、
    is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
    as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null

     1  static void Main(string[] args)
     2         {
     3             //1、里氏转换
     4             //1)、子类可以赋值给父类,如果有一个地方需要父类作为参数,我们可以给一个子类来代替             
     5             //Student s = new Student();
     6             //Person p = s;
     7              Person p = new Student();
     8             //string str = string.Join("|", new string[]{"1","2","3","4"});
     9             //Console.WriteLine(str);
    10             //Console.ReadKey();
    11             //2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
    12              //if (p is Student)
    13              //{
    14              //    Student ss = (Student)p;
    15              //    ss.StudentSayHello();
    16                  
    17              //}
    18              //else
    19              //{
    20              //    Console.WriteLine("转换失败");
    21              //}
    22             //as用法
    23             Student t=p as Student;
    24             t.StudentSayHello();
    25 
    26              Console.ReadKey();
    27         }
    28         public class Person
    29         {
    30             public void PersonSayHello()
    31             {
    32                 Console.WriteLine("我是父类");
    33             }
    34         }
    35         public class Student : Person
    36         {
    37             public void StudentSayHello()
    38             {
    39                 Console.WriteLine("我是学生");
    40             }
    41         }
    42         public class Teacher:Person
    43         {
    44             public void TeacherSayHello()
    45             {
    46                 Console.WriteLine("我是老师");
    47             }
    48         }
    View Code

    里氏转换小练习:

      1 namespace 里氏转换法练习
      2 {
      3     class Program
      4     {
      5         static void Main(string[] args)
      6         {
      7             //创建一个对象,通过一个循环,来调用他们打招呼的方法
      8             //Student s = new Student();
      9             //Person p = new Person();
     10             //ShuaiGuo sg = new ShuaiGuo();
     11             Person[] pers = new Person[10];
     12             Random r = new Random();
     13             for (int i = 0; i < pers.Length; i++)
     14             {
     15                 int rNumber = r.Next(1, 7);//产生一个1-6的随机数;
     16                 switch (rNumber)
     17                 {
     18                     case 1: pers[i] = new Student();
     19                         break;
     20                     case 2: pers[i] = new Teacher();
     21                         break;
     22                     case 3: pers[i] = new ShuaiGuo();
     23                         break;
     24                     case 4: pers[i] = new MeiNv();
     25                         break;
     26                     case 5: pers[i] = new YeShou();
     27                         break;
     28                     case 6: pers[i] = new Person();
     29                         break;
     30                 }
     31             }
     32             for (int i = 0; i < pers.Length; i++)
     33             {
     34                 if (pers[i] is Teacher)
     35                 {
     36                     ((Teacher)pers[i]).TeacherSayHi();
     37                 }
     38                 else if (pers[i] is YeShou)
     39                 {
     40                     ((YeShou)pers[i]).YeShouSayHi();
     41                 }
     42                 else if (pers[i] is MeiNv)
     43                 {
     44                     ((MeiNv)pers[i]).MeiNvSayHi();
     45                 }
     46                 else if (pers[i] is Student)
     47                 {
     48                     ((Student)pers[i]).StudentSayHi();
     49                 }
     50                 else if (pers[i] is ShuaiGuo)
     51                 {
     52                     ((ShuaiGuo)pers[i]).ShuaiGuoSayHi();
     53                 }
     54                 else
     55                 {
     56                     pers[i].PersonSayHi();
     57                 }
     58             }
     59             Console.ReadKey();
     60         }
     61 
     62     }
     63     public class Person
     64     {
     65         public void PersonSayHi()
     66         {
     67             Console.WriteLine("我是人类");
     68         }
     69     }
     70     public class Student : Person
     71     {
     72         public void StudentSayHi()
     73         {
     74             Console.WriteLine("我是学生");
     75         }
     76     }
     77     public class Teacher : Person
     78     {
     79         public void TeacherSayHi()
     80         {
     81             Console.WriteLine("我是老师");
     82         }
     83     }
     84     public class MeiNv : Person
     85     {
     86         public void MeiNvSayHi()
     87         {
     88             Console.WriteLine("我是美女");
     89         }
     90     }
     91     public class ShuaiGuo : Person
     92     {
     93         public void ShuaiGuoSayHi()
     94         {
     95             Console.WriteLine("我是帅锅");
     96         }
     97     }
     98     public class YeShou : Person
     99     {
    100         public void YeShouSayHi()
    101         {
    102             Console.WriteLine("我是菜狗");
    103         }
    104     }
    105 }
    View Code
  • 相关阅读:
    lombok工作原理分析
    jsqlparser和calcite和druid功能对比
    mysql主从备份及常见问题处理
    keepalived结合nginx实现nginx高可用
    FastDFS教程IV-文件服务器集群搭建
    FastDFS教程Ⅲ-文件服务器扩容
    fastDFS教程Ⅱ-文件服务器迁移
    FastDFS教程Ⅰ-文件服务器安装与Nginx配置
    Cognos报表调度与作业管理
    Cognos 11.0快速开发指南 Ⅱ
  • 原文地址:https://www.cnblogs.com/ggsdduzbl/p/4933394.html
Copyright © 2020-2023  润新知