1. 程式人生 > 其它 >7312. 【2021.10.18NOIP提高組模擬】決鬥

7312. 【2021.10.18NOIP提高組模擬】決鬥

一、概念

1、里氏轉換
1)、子類可以賦值給父類
2)、如果父類中裝的是子類物件,那麼可以講這個父類強轉為子類物件。

2、子類物件可以呼叫父類中的成員,但是父類物件永遠都只能呼叫自己的成員。
3、
is:表示型別轉換,如果能夠轉換成功,則返回一個true,否則返回一個false
as:表示型別轉換,如果能夠轉換則返回對應的物件,否則返回一個null

程式碼示例:

  class Program
    {
        static void Main(string[] args)
        {
                       1、里氏轉換
            
1)、子類可以賦值給父類:如果有一個地方需要一個父類作為引數,我們可以給一個子類代替 // Student s = new Student(); // Person p =s; Person p = new Student();//s; //string中的join方法就是:如果有一個地方需要一個父類作為引數,我們可以給一個子類代替 //string str = string.Join("|",new string[] { "1", "2", "3", "4" });
//Console.WriteLine(str); //Console.ReadKey(); 2)、如果父類中裝的是子類物件,那麼可以講這個父類強轉為子類物件。 //is的用法 //如果父類p可以轉換成Student子類物件。。。。 //if (p is Student) //{ // Student ss = (Student)p; // ss.StudentSayHello(); //}
//else //{ // Console.WriteLine("轉換失敗"); //} //as的用法 //將Student將轉為父類物件,如果成功則賦值,如果失敗則返回null; Student t = p as Student; t.StudentSayHello(); Console.ReadKey(); } } public class Person { public void PersonSayHello() { Console.WriteLine("我是父類"); } } public class Student : Person { public void StudentSayHello() { Console.WriteLine("我是學生"); } } public class Teacher : Person { public void TeacherSayHello() { Console.WriteLine("我是老師"); } }


示例://建立10個物件 通過一個迴圈 去呼叫他們各自打招呼的方法

 class Program
    {
        static void Main(string[] args)
        {
            //建立10個物件 通過一個迴圈 去呼叫他們各自打招呼的方法
            //Student s = new Student();
            //Person p = new Person();
            //ShuaiGuo sg = new ShuaiGuo();
 
            //初始化父類,給他賦值長度為10的父型別陣列
            Person[] pers = new Person[10];
            //例項化隨機生成1-7的數
            Random r = new Random();
            //迴圈將這6個類隨機賦值給父類陣列
            for (int i = 0; i < pers.Length; i++)
            {
                int rNumber = r.Next(1, 7);
                switch (rNumber)//1-6
                {
                    case 1: pers[i] = new Student();
                        break;
                    case 2: pers[i] = new Teacher();
                        break;
                    case 3: pers[i] = new ShuaiGuo();
                        break;
                    case 4: pers[i] = new MeiLv();
                        break;
                    case 5: pers[i] = new YeShou();
                        break;
                    case 6: pers[i] = new Person();
                        break;
                }
            }
 
            //迴圈輸出這父類陣列中的值
            for (int i = 0; i < pers.Length; i++)
            {
                //根據父類中的值判斷輸出的內容
               // pers[i].PersonSayHi();
                if (pers[i] is Student)
                {
                    ((Student)pers[i]).StudentSayHi();
                  //  pers[i].PersonSayHi();
                }
                else if (pers[i] is Teacher)
                {
                    ((Teacher)pers[i]).TeacherSayHi();
                }
                else if (pers[i] is ShuaiGuo)
                {
                    ((ShuaiGuo)pers[i]).ShuaiGuoSayHi();
                }
                else if (pers[i] is YeShou)
                {
                    ((YeShou)pers[i]).YeShouSayHi();
                }
                else if (pers[i] is MeiLv)
                {
                    ((MeiLv)pers[i]).MeiLvSayHi();
                }
                else 
                {
                    pers[i].PersonSayHi();
                }
 
            }
            Console.ReadKey();
 
        }
    }
 
    public class Person
    {
        public void PersonSayHi()
        {
            Console.WriteLine("我是人類");
        }
    }
 
 
    public class Student : Person
    {
        public void StudentSayHi()
        {
            Console.WriteLine("我是學生");
        }
    }
 
    public class Teacher : Person
    {
        public void TeacherSayHi()
        {
            Console.WriteLine("我是老師");
        }
    }
 
 
    public class MeiLv : Person
    {
        public void MeiLvSayHi()
        {
            Console.WriteLine("我是鎂鋁");
        }
    }
 
 
    public class ShuaiGuo : Person
    {
        public void ShuaiGuoSayHi()
        {
            Console.WriteLine("我是帥鍋");
        }
    }
 
 
    public class YeShou : Person
    {
        public void YeShouSayHi()
        {
            Console.WriteLine("我是野獸");
        }
    }