第六章节 多态 (多态的概述)

一.多态的实现

1.在面向对象思想中,多态的主要表现形式是:子类继承父类后对于同一个方法有不同的实现方式,多态的实现方式有两种:隐藏父类方法和重写父类方法

1.)接下来先讲解使用new关键字隐藏父类方法来达到多态的目的,看如下代码:

 class Animal
    {
        public void Show()
        {
            Console.WriteLine("发出了尖叫声");
        }
    }
class Bird:Animal
    {
        //在Bird类里面使用new关键隐藏父类成员并重写
        public new void Show()
        {
            Console.WriteLine("鸟类发出了尖叫声");
        }
    }

在主函数分别调用两个类

class Program
    {
        static void Main(string[] args)
        {
            Bird bird = new Bird();
            bird.Show();
            Animal animal = new Animal();
            animal.Show();
        }
    }

都进行实例化进行输出打印效果如下:
在这里插入图片描述
(2.)is-a关系可以和多态组合起来使用
在主函数内实例化一个is-a关系的对象

class Program
    {
        static void Main(string[] args)
        {
        //实例化了一个动物,这只动物是只鸟
            Animal bird = new Bird();
            bird.Show();
        }
    }

进行输出后如下图:
在这里插入图片描述
这说明通过new关键字进行隐藏重写的方法,实例化一个“is-a”关系的对象,然后调用里面的方法,这时候调用的是左边父类的show方法,而不是子类里面的show方法,在"is-a"关系的时候,如果想要调用子类的方法,就需要使用下面的方法重写实现

(2.)接下来讲解使用重写父类方法来达到多态的目的,看如下代码:

 class Animal
    {
    //使用virtual关键字修饰方法,这个方法便成为了虚方法
        public virtual void Show()
        {
        //父类必须定义为虚方法
            Console.WriteLine("动物类发出了尖叫声");
        }
    }
 class Bird:Animal
    {
        //在Bird子类使用override关键字来重写方法
        public override void Show()
        {
            Console.WriteLine("鸟类发出了尖叫声");
        }
        public void Read()
        {
            Console.WriteLine("鸟类能读书");
        }
    }

在主函数内调用“is-a”关系并调用Show方法:

 class Program
    {
        static void Main(string[] args)
        {
            Animal bird = new Bird();
            bird.Show();
        }
    }

进行输出后如图:
在这里插入图片描述
进行override重写父类方法来实现多态目的后,这时“is-a”关系进行调用Show方法,执行的是子类的Show方法,而不是父类的Show方法。
但这样的“is-a”关系也只能调用父类继承下来并重写的方法,不能调用自己特有的方法,如下图:
在这里插入图片描述
这里并不能调用这个Bird对象里面的Read方法

注意:重写方法时,子类和父类方法的返回值,方法名和参数必须相同,子类方法的可访问性不能低于父类方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值