重载、重写、重构

【前言】

在之前我们接触过重写、重载。今天我们学习到了重构,那么他们三者有什么区别呢?下面将为您揭晓

【正文】

一、重构

1.重构是什么?

重构就是改善现有的代码设计,让代码更加符合面向对象规则

2.怎么修改代码的设计?

示例:

上次我们说到小狗和小猫来报名参加叫声比赛,如今又来了小羊和小牛来报名叫声比赛,我们可以继续写一个牛类和羊类,然后来继承动物类,这样利用多态显然是可以实现的。但是我们发现在写代码的过程中,子类当中有很多代码是重复的。那么怎么才能更好的让我们的程序能体现面向对象的规则呢,我们可以利用重构来解决这个问题。

首先我们把重复的这个Shout()的方法体放到动物类中,去掉virtual 。然后把声音叫的部分改成另一个方法getShoutSound

class Animal
    {
        protected string name;
        public Animal(string name)
        {
            this.name = name;
        }
        public Animal()
        {
            this.name = "无名";
        }
        public string Shout()
        {
            string result = "";
            result += getShoutSound() + ",";
            return "我的名字叫" + name + "" + result;
        }

        // 得到叫声的虚方法,让子类与重写。      
        protected virtual string getShoutSound()
        {
            return "";
        }
    }
    class Cat :Animal
    {
        public Cat ():base()
        {

        }
        public Cat (string name):base( name)
        {

        }
        //重写父类的方法,返回叫声
        protected override string getShoutSound()
        {
            return "喵";
        }

    }

这样当我们再增加动物的时候,只需要给子类当中的叫声方法就可以了。这样写是不是更简便呢,也符合面向对象的原则。

二、重写

重写就是在父类当中定义一个虚方法,然后子类去重写,来实现自己的功能。方法名、参数、返回值必须是同样的。

三、重载

方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型。

比如现在有许多小猫出生,有的要起名字,有的不需要起名字。那么我们就可以用方法重载。

现在我们知道了重写、重载、重写所存在的意义了,其实他们都是为了让程序更好的实现面向对象的原则。

猜你喜欢

转载自blog.csdn.net/zhanduo0118/article/details/85263090