面向对象语言中实现多态方法总结

时间:2021-01-31 19:48:44

多态即“多种状态”,是面向对象设计中的一种重要的特征,在面向对象语言中多态的实现方法也有很多种。这里主要以C++和C#为例,总结一下实现多态的几种方法。

1.继承实现多态

通过继承来使子类对象拥有更多区别于父类对象的属性和方法。

C++:中允许多重继承出现

C#:只有单根继承。用到关键字override和base分别对基类中的方法进行重写和调用

举例:以C#为例

class Employee()//父类
{
publicvirtual void EmpInfo() //virtual关键字的使用
{
console.WriteLine("此方法显示员工信息!");
}
}
classDerEmployee:Employee
{
publicoverride void EmpInfo()
{
base.EmpInfo();//调用基类的构造函数
console.WriteLine("此方法重写基类方法")//实现对基类方法的重写即实现多态
}
}


2 .方法重载实现多态

这里的方法重载,与上面的继承中的方法重载,强调的环境不一样,其实是一个道理。只不过,这里更加强调函数的参数类型和个数的不同。(C#和C++中都支持)

例如:

public int sum(int a,int b);
public double sum(double i,double j);
public int sum(int a,int b,int k);
利用这种方法实现的重载,必须注意一下方面:

1.方法名必须相同

2.可以通过参数类型不同和参数个数不同实现重载

3.不能通过返回类型不同来实现

3.运算符重载实现多态

这里运算符重载,我觉得是一个难点。我理解的是:举个例子:我们定义了两个变量x,y,我们说value=x+y。可是,我把x,y分别换成vect1,vect2,如果没有事先声明,二者是不可以进行相加的。这个时候,我们利用运算符重载,就可以让二者相加,实现重载(C++和C#中都支持)

class Vector
{
publicdouble x;
publicdouble y;
Vector(doublex,double y)
{
this->x=x;
this->y=y;
}
Vectoroperator +(Vector A,Vector B) //通过对'+'运算符重载实现多态
{
returnVector(A.x+B.x,A.y+B.y);
}
}


 

在使用运算符重载时,对于比较运算符:=/!=,>/<=,</>=,在C#中要求必须成对重载。

4.抽象类和虚函数实现多态

关于这一点,在C++中和C#中在声明时是有些不同的。

抽象类的声明都用了abstract关键字。利用抽象方法实现多态

虚函数:都用到了virtual关键字,C#中在对对象进行重写时还用到了override关键字。

C++中利用虚函数初始化为0来声明纯虚函数 。

//虚函数class A    {        public virtual void Sum()         {            Console.WriteLine("I am AClass,I am virtual sum().");        }    }    class B : A        {        public override void Sum() //重新实现了虚函数           {            Console.WriteLine("I am BClass,I am override sum().");        }      }//抽象类abstract  class Shape{abstract public int Area();}classSquare:Shape{int x,y;public override int Area(){return x*y;}}



5.通过接口实现多态

通过定义一个接口,在类中写明具体的实现方法。从而实现多态。由于在C#中是不允许多重继承的。我们不能通过多重继承来实现多态,但是C#中是允许多重接口实现的。

interface IPict
{
publicint deleteImage(); //只有方法声明,没有实现
publicvoid displayImage();
}
public class MyImage
{
publicint deleteImage()
{
console.WriteLine("删除图像");
}
publicvoid displyImage()
{
console.WriteLine("显示图片!");
}
}


通过在程序中利用多态,我们可以使我们的程序更加灵活,通过上述总结,可见,多态的实现不止一种方法。更加深入的应用还有待以后的学习和积累。