菜鸟学习之旅——多态

本文介绍了多态的概念,并详细讲解了在C#中如何通过方法重写和抽象方法、抽象类来实现多态。讨论了虚方法的使用规则,以及抽象方法和抽象类的区别,提供了相关示例代码。
摘要由CSDN通过智能技术生成

多态这个词之前就有人听说过,当时自己很好奇,多态到底是什么,直到今天终于明白了,其实多态就是对象可以表现多个类型的能力,例如:一条狗,它不仅可以帮人们看家护院,还可以陪伴人们,这条狗最起码有这两个功能,这就是多态的一种表现形式,其实现实生活中,很多事物都有多态的特性!下面就让我们来了解一下c#中多态的具体表现形式

在C#中如何实现多态

实现多态可以有两种不同的方法,一种是通过父类方法的重写,另一种是抽象方法和抽象类,下面我们依次来学习一下这两种方法

方法的重写

1、子类与父类方法名相同的方法
举例:

 public  class Person
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private char _gender;
        public char Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }
        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
        public   void Show()//虚方法
        {
            Console.WriteLine("我是人别害怕");
        }
    }
    public class Teacher : Person
    {
        public  void Show()//重写父类中的方法,但是不影响运行
        {
            Console.WriteLine("我是老师,别害怕");
                
        }
    }

当我们写完之后我们会发现子类的show方法下面会出现绿线,这是因为我们有一些地方写的不合理,并不意味着程序不能运行。解决办法有以下两种
a、在子类的方法名前加new,加new的意思就是隐藏基类方法
b、在父类的修饰符后面写virtual,在子类的修饰符后面写override

2、子类重写父类方法
前提:父类的方法必须是虚方法
子类可以重写父类的方法,也可以调用基类方法

这个时候就会涉及到什么是虚方法
在c#中在修饰符后面加上virtual的方法就是虚方法

public virtual  void Show()//虚方法
        {
            Console.WriteLine("我是人别害怕");
        }

注意:
1、虚方法不能用static来修饰
2、virtual不能与private一起使用

抽象方法和抽象类

什么是抽象方法:下面这句代码就是一个抽象方法

 public abstract void Shout();

什么是抽象类:以下这段代码就是抽象类

 public abstract class Animal
    {
        public Animal(string name)
        {
            this._name =Name;
        }
        string _name;
        public  string Name
        {
            get { return _name; }
            set { _name = value; }

        }
        public abstract void Shout();
    }

使用抽象方法必须注意以下几点:
1、抽象方法使用abstract来修饰
2、抽象方法没有方法体
3、抽象方法必须在抽象类中
4、抽象类无法实例化
5、父类是抽象类,子类继承了这个类,必须把抽象类中的方法重写
6、子类必须全部重写父类中的抽象方法
举例:

 public abstract class Animal
    {
        public Animal(string name)
        {
            this._name =Name;
        }
        string _name;
        public  string Name
        {
            get { return _name; }
            set { _name = value; }

        }
        public abstract void Shout();
    }
    public class Pig:Animal 
    {
        public Pig(string name):base(name)
        { }
        public override void Shout()
        {
            Console.WriteLine("{0}哼哼",this.Name);
        }
    }

看了抽象方法之后是不是有点和虚方法有点混淆,下面让我们来辨析以下这两种方法的区别
在这里插入图片描述
以上这些就是我对多态的理解以及抽象方法和虚方法的理解,有什么地方写的不对,请多多指教

我相信越努力的人越幸运,让我们一起努力吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值