里氏替换原则


  

  里氏替换原则(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


		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值