一.面向对象的多态性
多态是指两个或两个以上的不同类的对象对同个方法的调用作出的不同响应的方式。
重载也是实现多态的一种方式。
二.使用抽象类和抽象方法的实现多态
2.抽象类和抽象方法的概述:
<1>抽象方法是一个没有实现的方法,通过在定义是增加关键字abstract可以声明抽象方法。
语法:
访问修饰符 abstract 返回值类型 方法();
抽象方法没有闭合的大括号,简单的说就是没有方法体。
<2>含有抽象方法的类必然是抽象类。同样,使用abstract 关键字来定义个抽象类
语法:
访问修饰符 abstract class 类名
抽象类中不一定都是抽象方法,抽象类也可以容纳有具体实现的方法。但是含有抽象方法的类必然是抽象类。
注意:1 抽象类不能被实例化。
2 抽象类必须被继承。
3 如果抽象类没有被子类的方法实现,那么子类也将被默认为抽象类
4 抽象类不能是密封的或者是静态的(sealed/ static)
抽象类和抽象方法的使用
1.重写抽象方法
当从一个抽象基类派生一个子类时。子类将继承基类的所用特征,包括基类为实现的方法。
抽象方法必须在其子类中实现,除非其的子类也是抽象类。
语法:
访问修饰符 override 返回值类型 方法() {//方法体}
里氏替换原则
原则上子类的对象是可以赋给父类对象的,反过来,父类的对象是不能替换子类的。这种特征称为里氏替换原则(LSP)。
<1>“is”操作符用于检查对象是否与给定的类型相同。主要的使用方法是判断。其结果为true或false 。
<2>“as”操作符用于两个对象之间的类型转换。
As运算符类似于强制类型转换,所不同的是,当转换失败时,运算符将产生(null)空,而不引发异常。
使用虚拟方法实现多态。(提供默认的方法体)
定义虚方法,使用virtual 关键字修饰,可以有方法体。
语法:
访问修饰符 virtual 返回值类型 方法(){//方法体}
虚方法可以有具体的实现,也可以被重写。重写使用override 关键字。
当虚方法中有方法体,并且在子类中又被重写后,测试程序的调用不会虚方法中默认的方法体,而是直接执行重写后的方法体,当没有被重写时,测试程序将调用默认的方法体。
虚方法的实际应用
在集合中重写Equals()方法。Equals方法默认情况下只支持引用相等,也就是相比较的两个对象是否引用同一个对象。不过Equals方法是一个虚方法,可以通过重写让它支持值相等。
语法:
Public virtual bool Equals(object obj)
通过重写后,我们可以在集合中,通过让对象与对象值相等的方式,删除集合中的对象。
虚方法与抽象方法的区别
虚方法 抽象方法
用virtual修饰 用abstract修饰
要有方法体 不允许有方法体
可以被子类override 必须被子类override
除了密封类和静态类外都可以写 只能在抽象类中
面向对象的三大特征:
封装:保证对象自身数据的安全性、完整性。即隐藏内部实现,稳定外部引用。
继承:子类继承父类成员,实现代码复用。
多态:调用相同方法实现不同的实现方式。
简单工厂设计模式
简单工厂模式是设计模式中的一种。设计模式是得到了很好的研究范例,是一种经验的总结。
原理:根据不同的需求,在同一个方法中,返回不同的子类对象,方法的返回值也是父类的对象。
多态是指两个或两个以上的不同类的对象对同个方法的调用作出的不同响应的方式。
重载也是实现多态的一种方式。
二.使用抽象类和抽象方法的实现多态
2.抽象类和抽象方法的概述:
<1>抽象方法是一个没有实现的方法,通过在定义是增加关键字abstract可以声明抽象方法。
语法:
访问修饰符 abstract 返回值类型 方法();
抽象方法没有闭合的大括号,简单的说就是没有方法体。
<2>含有抽象方法的类必然是抽象类。同样,使用abstract 关键字来定义个抽象类
语法:
访问修饰符 abstract class 类名
抽象类中不一定都是抽象方法,抽象类也可以容纳有具体实现的方法。但是含有抽象方法的类必然是抽象类。
注意:1 抽象类不能被实例化。
2 抽象类必须被继承。
3 如果抽象类没有被子类的方法实现,那么子类也将被默认为抽象类
4 抽象类不能是密封的或者是静态的(sealed/ static)
抽象类和抽象方法的使用
1.重写抽象方法
当从一个抽象基类派生一个子类时。子类将继承基类的所用特征,包括基类为实现的方法。
抽象方法必须在其子类中实现,除非其的子类也是抽象类。
语法:
访问修饰符 override 返回值类型 方法() {//方法体}
里氏替换原则
原则上子类的对象是可以赋给父类对象的,反过来,父类的对象是不能替换子类的。这种特征称为里氏替换原则(LSP)。
<1>“is”操作符用于检查对象是否与给定的类型相同。主要的使用方法是判断。其结果为true或false 。
<2>“as”操作符用于两个对象之间的类型转换。
As运算符类似于强制类型转换,所不同的是,当转换失败时,运算符将产生(null)空,而不引发异常。
使用虚拟方法实现多态。(提供默认的方法体)
定义虚方法,使用virtual 关键字修饰,可以有方法体。
语法:
访问修饰符 virtual 返回值类型 方法(){//方法体}
虚方法可以有具体的实现,也可以被重写。重写使用override 关键字。
当虚方法中有方法体,并且在子类中又被重写后,测试程序的调用不会虚方法中默认的方法体,而是直接执行重写后的方法体,当没有被重写时,测试程序将调用默认的方法体。
虚方法的实际应用
在集合中重写Equals()方法。Equals方法默认情况下只支持引用相等,也就是相比较的两个对象是否引用同一个对象。不过Equals方法是一个虚方法,可以通过重写让它支持值相等。
语法:
Public virtual bool Equals(object obj)
通过重写后,我们可以在集合中,通过让对象与对象值相等的方式,删除集合中的对象。
虚方法与抽象方法的区别
虚方法 抽象方法
用virtual修饰 用abstract修饰
要有方法体 不允许有方法体
可以被子类override 必须被子类override
除了密封类和静态类外都可以写 只能在抽象类中
面向对象的三大特征:
封装:保证对象自身数据的安全性、完整性。即隐藏内部实现,稳定外部引用。
继承:子类继承父类成员,实现代码复用。
多态:调用相同方法实现不同的实现方式。
简单工厂设计模式
简单工厂模式是设计模式中的一种。设计模式是得到了很好的研究范例,是一种经验的总结。
原理:根据不同的需求,在同一个方法中,返回不同的子类对象,方法的返回值也是父类的对象。