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

多态即“多种状态”,是面向对象设计中的一种重要的特征,在面向对象语言中多态的实现方法也有很多种。这里主要以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("显示图片!");
}
}

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




  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值