小菜鸟学C#——面向对象之多态

概念:让一个对象能够表现出多种状态(类型)。

实现方法:

1.虚方法

2.抽象类


虚方法实现多态:

实现方法:

            将父类方法标记为虚方法, 使用关键字 virtual, 这个函数可以被子类重新写一遍
然后在子类的方法写上 override。

我们创建一个人类Person  且里面有一个方法 SayHello()

  public class Person
    {

        public virtual void SayHello()
        {
            
        }
    }

再创建两个类分别是Man类和Woman类 且都继承于Person类

public class Man : Person
    {

        public override void SayHello()
        {
            Console.WriteLine("我是男人");
        }


    }
    public class Woman : Person
    {
        public override void SayHello()
        {
            Console.WriteLine("我是女人");
        }
    }

    当我们要实现Man和Woman类的方法的时候只需要创建一个对象即可

 Person[] people=new Person[2];  //声明一个人类数组
            people[0] = new Man();
            people[1] = new Woman();

            for (int i = 0; i < people.Length; i++) //遍历数组
            {
                people[i].SayHello();
            }

            Console.ReadLine();

最后结果为:

这时发现一个对象people拥有两种的状态(男人和女人)  这就简单实现了多态。


抽象类实现多态:

实现方法:

    父类方法用abstract修饰 ,不允许有方法体 ,必须被子类override,且只能写在抽象类中。

抽象类就是在class前加上abstract。

    还是刚才那个例子,我们发现Person类中的方法不需要实现,Person是一个抽象的名词,他的

方法体没有任何意义,所以可以将virtual改为abstract使之成为抽象方法。

  public abstract class Person
    {

        public abstract void SayHello();//抽象方法没有方法体 直接在括号后加上分号
       
    }

抽象类子类书写步骤和虚方法步骤一样

最后结果都为:



那么什么时候用虚方法实现多态什么时候用抽象类实现多态呢?

1.如果父类中的方法默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,使用虚方法
2.如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义成抽象类

最后附上一张图用以区别抽象类和虚方法的不同:




以上就是实现多态的两种方式,面向对象思想博大精深,我也了解一点皮毛都算不上,希望以后大家共同成长。





猜你喜欢

转载自blog.csdn.net/wukai9958/article/details/80961993