【C#】多态

多态

多态分为静态多态性和动态多态性

静态多态性

静态多态性通过函数重载和运算符重载实现

函数重载:函数重载就是同一个函数名称,但是函数的参数不一样,我们简单举一个例子

using System;

namespace 函数重载实现静态多态
{
    class Program
    {
        static int Add(int a, int b)
        {
            return a + b;
        }
        static double Add(double a, double b)
        {
            return a + b;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("{0}", Add(1,2));
            Console.WriteLine("{0}", Add(1.2, 3.2));
        }
    }
}

运算符重载:运算符重载就是自己重新定义运算符的计算结果,例如两个箱子相加要得到一个新的箱子,使用普通的+号运算符中是不会计算出来的结果的,但是我们可以通过使用operator关键字,来对+号运算符进行重载。我们举一个简单的例子来实现两个箱子相加来计算箱子的体积。

using System;

namespace 运算符重载实现多态
{
    class Box
    {
        double length;//长
        double height;//宽
        double breadth;//高

        public Box(double a, double b, double c)
        {
            length = a;
            height = b;
            breadth = c;
        }

        public void Show()
        {
            Console.WriteLine("体积={0}", length*height*breadth);
        }
        
        public static Box operator +(Box a, Box b)
        {
            Box c = new Box(a.length+b.length, a.height+b.height, a.breadth+b.breadth);

            return c;
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            Box a = new Box(1, 1, 1);
            Box b = new Box(2, 2, 2);

            Box c = a + b;
            c.Show();
        }
    }
}

动态多态性

动态多态性通过抽象类和虚方法实现

抽象类:抽象类使用abstract关键字进行创建,抽象类里面包含抽象方法,抽象方法只进行定义而不实现,实现的事情交给该抽象类的子类进行,不同的子类对同一个抽象方法实现不同的功能,这样就可以实现多态。要实现多态,需要使用子类实例指向父类对象。我们来看下面这个例子。

例子定义一个动物抽象类,动物的一个功能是叫,因此给他定义一个抽象方法speak。子类狗和猫继承动物这个抽象类,重写speak功能,来实现多态。特别地,要使用多态,需要子类实例指向父类对象,例如定义一个动物,但是它的示例是狗,这样就会产生多态。

	//抽象类实现多态的例子
	abstract class Animal//定义一个动物的抽象类
	{
		abstract public void speak();
	}

	class Dog : Animal//定义一个狗类,它继承了动物类
	{
		public override void speak()//对动物类的speak方法进行重写,以此实现多态
		{
			Console.WriteLine("汪汪");
		}
	}

	class Cat : Animal
	{
		public override void speak()
		{
			Console.WriteLine("喵喵");
		}
	}

	class Program
    {
        static void Main(string[] args)
        {
			Animal animal1 = new Dog();//子类的示例指向父类对象,因此会造成多态
			Animal animal2 = new Cat();//子类的示例指向父类对象,因此会造成多态

			animal1.speak();
			animal2.speak();
		}
    }

执行结果如下,对于是狗的实例,就是汪汪,对于猫的实例,就是喵喵:
在这里插入图片描述
虚方法:虚方法关键字使用virtual进行创建,我们还是以上面动物的例子,通过虚方法来实现多态。

//虚方法实现多态的例子
using System;

namespace 虚方法实现多态
{
    class Animal
    {
        public virtual void speak()
        {
            Console.WriteLine("Animal Speak");
        }

    }

    class Dog : Animal
    {
        public override void speak()
        {
            Console.WriteLine("汪汪");
        }
    }

    class Cat : Animal
    {
        public override void speak()
        {
            Console.WriteLine("喵喵");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Animal animal1 = new Dog();
            Animal animal2 = new Cat();

            animal1.speak();
            animal2.speak();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值