类是单继承的 也就是说 一个类只能继承一个父类
里氏转换两句话
1.子类可以赋值给父类
其实就是 子类继承了父类的方法 可以直接调用
不存在转换的问题
Person p = new Person("person", 18, '中');
Student s = new Student("student", 19, '男', "打豆豆");
p.PersonSay();
p = s;
s.PersonSay(); //可以直接调用父类的方法,给子类进行赋值
s.StudentSay(); //自己的方法
2.如果父类中装的是子类对象 那么可以将这个父类强制转换为子类
//Person p = new Student("student",18,'男',"打豆豆");
//Student st = (Student)p; //父类强转为子类 也可以理解为 通过第三方st 吧父类的能力付给了st 同时 st也具有子类的功能
//st.PersonSay();
//st.StudentSay();
子类可以隐式的转换为父类 但是 子类不可以再转换成其他的子类
练习题
//写一个person 类 再随意的写5个类 都继承与person 并且这六个类都有属于自己打招呼的方法
// 写一个长度为10 的Person数组 循环这个数组
// 根据随机数 生成1-7之间的数字
// 每个数字都代表产生不同的类型 最后 循环的输出它们打招呼的方法
Person[] person = new Person[10];
Random r = new Random();
for (int i = 0; i < person.Length; i++)
{
int number = r.Next(1, 7);
switch (number) //在switch当中进行里氏转换
{
case 1: person[i] = new Person();
break;
case 2: person[i] = new Stiter();
break;
case 3: person[i] = new Student();
break;
case 4: person[i] = new Teacher();
break;
case 5: person[i] = new XiGe();
break;
case 6: person[i] = new YeShow();
break;
}
}
for (int i = 0; i < person.Length; i++)
{
ZhuanHuan(person[i]);
}
Console.ReadKey();
}
///
/// 进行里氏转换的判断
///
///
public static void ZhuanHuan(Person p) //传进来person类型的元素 然后 在这里边进行里氏转换类型的判断
{
if (p is Stiter)
{
((Stiter)p).Stiter1();
}
else if (p is Student)
{
((Student)p).student1();
}
else if(p is Teacher)
{
((Teacher)p).Teacher1();
}
else if (p is XiGe)
{
((XiGe)p).Xige1();
}
else if (p is YeShow)
{
((YeShow)p).Show();
}
else
{
((Person)p).Person1();
}
}