里氏替换原则(LSP):
反过来说,父类对象是不能替换子类对象的,这种特性称为里氏替换原则
1.子类可以隐式的转换父类
2.父类必须强转子类
is && as
is: 相当与判断。A is B;A 是不是 B 或者A是不是B的子类
as: 先判断,再转换。(他比传统的强制转换要相对来说安全一点,因为传统的强制转换,一旦转换失败的话,
程序就崩溃了,那使用as关键字可以保证程序一样会执行,只不过转换不成功会赋一个空值)
using System;
namespace 里氏替换原则
{
class Person{
public void Say(){
Console.WriteLine ("父类说!~");
}
}
class Zhang:Person{
public void Say(){
Console.WriteLine ("张说!~");
}
}
class Li:Person{
public void Say(){
Console.WriteLine ("李说!~");
}
}
class MainClass
{
public static void Main (string[] args)
{
// Person p = new Zhang ();
// p.Say ();
// Person p1 = new Zhang ();
// p1.Say ();
// Person p1 = new Li ();
// Person p2 = p1; // 编译通过
// Li l1 = p1; // 编译不通过,因为父类必须强转为子类
// Li l1 = (Li)p1; // 子类对象介意赋给父类对象;父类必须强转子类,这里的p1是父类对象,就必须强换成子类
// Person p = new Zhang ();
// Zhang z = (Zhang)p;
// 子类和子类
// Zhang z1 = new Zhang();
// Li l1 = new Li();
// z1 = (Zhang)l1; // 编译不通过
//请判断下列输出是什么?
// Person p = new Zhang ();
// if (p is Zhang) {
// Zhang z1 = p as Zhang;
// z1.Say ();
// } else {
// Console.WriteLine ("------");
// }
// GameObject
}
}
}