7312. 【2021.10.18NOIP提高組模擬】決鬥
阿新 • • 發佈:2021-10-20
一、概念
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("我是野獸"); } }