里氏轉換

里氏轉換,

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);


        //創(chuàng)建十個對象,通過循環(huán)去調用他們打招呼的方式,
        //讓他們都繼承Person類,創(chuàng)建一個Person類的數組,
        Person[] P = new Person[10];//打招呼要十次,所以創(chuàng)建十個元素的Person數組。
        Random r = new Random();
        
        //通過遍歷數組給P賦值
        //先遍歷這個數組
        for (int i = 0; i < P.Length; i++)
        {
            int rnubers = r.Next(1, 7);
            //現(xiàn)在這個P數組什么都沒有,通過seich循環(huán)來給它賦值
            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("我是野獸");
    }
}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,812評論 0 11
  • 轉自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,804評論 3 93
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,692評論 18 399
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,427評論 0 2
  • 與簡書結緣已有近一個月的時間了,發(fā)布了三篇小文章,心里偶爾會沾沾自喜,但更多的時侯,我會去讀一讀專題或首頁上的文章...
    青風竹韻閱讀 657評論 14 15

友情鏈接更多精彩內容