里氏转换

里氏转换,

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("我是野兽");
    }
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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