里氏转换

里氏转换,

1子类可以赋值给父类。
2如果父类中装的是子类对象,可以将这个父类强转换成子类。
看看这个例子就能懂。

namespace 里氏转换
{
class Program
{
    static void Main(string[] args)
    {
        //Student stu = new Student();
        //Person P1 = stu;
        string s = string.Join("|", new string[] { "1", "2", "3", "4", "5" });

        //里氏转换,
        //1子类可以赋值给父类
        //实例化一个子类对象
        //Teachaer teach = new Teachaer();
        //声明一个父类对象
        //Person P1;
        //将子类的值赋值给父类
        // P1 = teach;
        //可以简写为
        // Person P2 = new Student();
        //P2.SayHello();
        //如果父类中装的是子类对象,可以将这个父类强转换成子类
        //Student stu2 = (Student)P2;
        //stu2.studentSayHello();
        //一般在转换前做一个判断,判断的关键字为is和as。is的返回值为TURE和FALSE.as关键字,如果可以转换,则返回转换的对象,如果不能转换,则返回null。

        // Teachaer t2 = P1 as Teachaer;
        //t2.teacherSayHello();

        //if (P1 is Teachaer)
        //{
        //    Teachaer t1 = (Teachaer)P1;
        //    t1.teacherSayHello();

        //}
        //else
        //{
        //    Console.WriteLine("转换失败");
        //}

        //Console.WriteLine(s);


        //创建十个对象,通过循环去调用他们打招呼的方式,
        //让他们都继承Person类,创建一个Person类的数组,
        Person[] P = new Person[10];//打招呼要十次,所以创建十个元素的Person数组。
        Random r = new Random();
        
        //通过遍历数组给P赋值
        //先遍历这个数组
        for (int i = 0; i < P.Length; i++)
        {
            int rnubers = r.Next(1, 7);
            //现在这个P数组什么都没有,通过seich循环来给它赋值
            switch (rnubers)
            {
                case 1:
                    P[i] = new Student();
                    break;
                case 2:
                    P[i] = new Teachaer();
                    break;
                case 3:
                    P[i] = new ShuaiGuo();
                    break;
                case 4:
                    P[i] = new Meinv();
                    break;
                case 5:
                    P[i] = new YeShou();
                    break;
                case 6:P[i] = new Person();
                    break;//这样就给P这个数组通过随机数的方法完全赋值了。
            }
            //遍历这个数组,来输出sayhello的方法。

        }
        for (int i = 0; i < P.Length; i++)
        {
            //遍历了这个数组 在这个地方如果输出p[i].sayhello的方法的话,会全部输出我是人类,
            //是因为这是一个person类的数组,要通过里氏转化,is或者as转换成子类的对象才可以调用子类中的方法
            if (P[i] is Student)
            {
                //进行转换
                ((Student)P[i]).studentSayHello();
            }
            else if(P[i] is YeShou)
            {
                ((YeShou)P[i]).YeShouSayHello();
            }
            else if(P[i] is Meinv)
            {
                ((Meinv)P[i]).meiNvSayHello();
            }
            else if(P[i]is Teachaer)
            {
                ((Teachaer)P[i]).teacherSayHello();
            }
            else if(P[i] is ShuaiGuo)
            {
                ((ShuaiGuo)P[i]).shuaiGuoSayHello();
            }
            else
            {
                P[i].SayHello();
            }
        }
        Console.ReadKey();
    }
}
class Person
{
    public void SayHello()
    {
        Console.WriteLine("我是人类");
    }
}
class Student : Person
{
    public void studentSayHello()
    {
        Console.WriteLine("我是学生");
    }
}
class Teachaer : Person
{
    public void teacherSayHello()
    {
        Console.WriteLine("我是老师");
    }
}
class Meinv : Person
{
    public void meiNvSayHello()
    {
        Console.WriteLine("我是美女");

    }
}
class ShuaiGuo : Person
{
    public void shuaiGuoSayHello()
    {
        Console.WriteLine("我是帅锅");
    }
}
class YeShou : Person
{
    public void YeShouSayHello()
    {
        Console.WriteLine("我是野兽");
    }
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,603评论 0 11
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 8,469评论 3 93
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,196评论 0 2
  • 与简书结缘已有近一个月的时间了,发布了三篇小文章,心里偶尔会沾沾自喜,但更多的时侯,我会去读一读专题或首页上的文章...
    青风竹韵阅读 612评论 14 15