重点:
里氏替换原则阐述了什么道理?
定义抽象类的关键字是什么?
as关键字的作用是什么?
抽象类中只能有抽象方法吗?
什么时候使用抽象类?
里氏替换原则(LSP)
在一个软件系统中,子类对象可以替换所有使用的父类对象,且程序行为没有变
SE ai = new SE();
SE joe = new SE();
PM gates = new PM();
List<Employee> empls = new List<Employee>();
empls.Add(ai);
empls.Add(joe);
empls.Add(gates);
- 里氏替换原则的应用
里氏替换原则是软件设计应用遵循的重要原则之一,有了里氏替换原则才是继承复用成为可能。只有当子类可以替换父类时,软件的功能不受影响,父类才能真正被使用,而子类也能在父类的基础上增加新的行为。
is与as操作符
- is 检查对象是否与指定类型兼容
if (empls[i] is SE) {}
- as 用于在兼容的类型之间执行转换
SE se = empls[i] as SE;
在这里插入图片描述
- as和强制转换的区别
1.强制转换如果强转不成功,会报异常
2.as如果装换不成功会返回一个nu
用as操作符进行类型转换不会产生异常,但这并不代表不需要异常处理,但是下一句通常会包空指针错误码。
父类类型作为参数
里氏替换原则子类对象可以替换父类对象那么在开发程序时可以编写父类类型作为形式参数的方法,在实际调用时传入子类对象
,从而实现多态。
小结
用虚方法实现多态的基本步骤:
(1)子类重写父类的虚方法,其中有两种方式。
- 创建父类对象,用子类对象实例化父类对象。
- 把父类类型作为形参类型,他的子类对象作为 实参chuang传入。
(2)运行时,根据实际创建的对象决定执行那个方法。
抽象类和抽象方法
一.抽象方法
- 抽象方法是一个没有实现的方法,通过在定义方法时增加一个abstract 可以声明抽象方法
-
语法:
访问修饰符abstract返回值类型方法名(); - 抽象方法没有闭合大括号(方法体),而是直接加一个 ;(分号),他没有包括方法逻辑的方法体。
- 含有抽象方法的类必然是抽象类。
二.抽象类
- 抽象类同样用abstract关键字来定义。
- 语法:
访问修饰符abstractclass类名();
-常见错误
(1)抽象类不能被实例化
(2)抽象类不能是密封或者静态的 - 抽象类只能有抽象方法吗?