1、子類可以賦值給父類。
2、如果這個父類中裝的是子類對象,可以把這個父類強轉為子類。
class Program
{
static void Main()
{
Person[] p = new Person[10];
Random r = new Random();
for(int i = 0; i < p.Length; i++)
{
int rNumber = r.Next(1,4);
switch(rNumber)
{
case 1:p[i]=Student();
break;
case 2:p[i]=Teacher();
break;
case 3:p[i]=Person();
break;
case 4:p[i]=DaLao();
break;
}
}
for(int i = 0; i < p.Length; i++)
{
//使用is判斷p[i]中裝的是否是對應的子類對象,
//如果是,就將父類對象強轉為子類對象
//父類無法調用子類方法, 所以想要顯示出子類方法,必須使用子類對象調用
if(p[i] is Student)
{
((Student)p[i]).StudentSayHellow();
//如果p[i]中裝的是Student對象,就將其強轉為Student類型,然后調用StudentSayHellow方法
}
else if(p[i] is Teacher)
{
((Teacher)p[i]).Teacher.SayHellow();
}
else if(p[i] is DaLao)
{
((DaLao)p[i]).DaLaoSayHellow();
}
else
{
p[i].SayHellow();//調用Person類自己的方法
}
}
Console.ReadKey();
}
}
public class Person
{
public void SayHellow()
{
Console.WriteLine("你好,我是人類");
}
}
public class Student:Person
{
public void StudentSayHellow()
{
Console.WriteLine("你好,我是學生");
}
}
public class Teacher:Person
{
public void TeacherSayHellow()
{
Console.WriteLine("你好,我是老師");
}
}
public class DaLao:Person
{
public void DaLaoSayHellow()
{
Console.WriteLine("你好,我是DaLao");
}
}