zoukankan      html  css  js  c++  java
  • 用人类的话来描述 里氏转换

    里氏转换

    1,子类可以赋值给父类

      换句话说,如果一个地方需要一个父类,那么我们可以给一个子类代替

      我要的是一个人,你给我一个御姐还是一个萝莉我不在乎(笑)

     1     class Person
     2     {
     3         public void SayHellow()
     4         {
     5             Console.WriteLine("Person");
     6         }
     7     }
     8     class Student : Person
     9     {
    10         public void SayHellow()
    11         {
    12             Console.WriteLine("Student");
    13         }
    14     }
    15     class Teacher:Person
    16     {
    17         public void SayHellow()
    18         {
    19             Console.WriteLine("Teacher");
    20         }
    21     }
    22     
    23 
    24     class Program
    25     {
    26         
    27         static void Main(string[] args)
    28         {
    29             Student st = new Student();
    30             Person pe = st;
    31             Console.WriteLine(pe.GetType().ToString());
    32             pe.SayHellow();
    33             Student st2 = (Student)pe;
    34             st2.SayHellow();
    35 
    36             Console.ReadKey();
    37         }
    38     }
    39     /*输出为:
    40 ConsoleApplication2.Student
    41 Person
    42 Student
    43     */

     29.30行可以简写为:

    1 Person pe = new Student();

    2,如果父类中装的是子类对象,那么可以将这个父类强制转换为子类对象

      这个人是一个萝莉,那么我就可以把她当作萝莉对待,但我不能把她当作御姐

    前面代码中的

    1 Student st2 = (Student)pe;

    就是这个意思,这里因为pe虽然是person类型的,但里面装的是student

    如执行

    1 Teacher st2 = (Teacher)pe;

    就会抛异常

    也就是说,这个人说一个学生,你可以要他去做学生的事情,但是不能让他去做老师的事情。

    is And as

    is,如果能够转换,返回true,否则返回false

    1     if(pe is Teacher)
    2     {
    3          Console.WriteLine("老师");
    4     }else if(pe is Student)
    5     {
    6          Console.WriteLine("学生");
    7     }

    结果输出:学生

    as,如果能够转换,返回转换后的对象,否则返回null

    1     Student st2 = pe as Student;
    2     st2.SayHellow();
    3     Teacher te = pe as Teacher;
    4     if(te==null)
    5     {
    6         Console.WriteLine("null");
    7     }
    8 //输出结果为:学生,null
  • 相关阅读:
    json web token 入门
    Mysql查询表注释和字段注释信息
    Nginx核心知识100讲学习笔记(陶辉):目录
    Kubernetes进阶实战读书笔记:网络存储
    Kubernetes进阶实战读书笔记:持久化存储卷(pv详解)
    Kubernetes进阶实战读书笔记:存储卷概述
    sybase
    Delphi 解决StrToDateTime()不是有效日期类型的问题
    delphi TStringList 用法详解
    看看Delphi中的列表(List)和泛型
  • 原文地址:https://www.cnblogs.com/Yukisora/p/7017509.html
Copyright © 2011-2022 走看看