zoukankan      html  css  js  c++  java
  • 封装继承多态

    面向对象语言有三大法宝:封装、继承和多态。其功能就一条,加快程序开发,方便理解。

    封装

    :在面向对象编程中,封装(encapsulation)是将对象运行所需的资源封装在程序对象中——基本上,是方法和数据。意思就是说,把该单独拿出来的方法或者属性单独新建个类。,把他们放到一起。

    例如说:

    namespace IArraylIst
    {
        class Score
        {
            ArrayList a1 = new ArrayList();
    
            /// <summary>
            /// 添加分数的方法
            /// </summary>
            public void AddMark()
            {
                int i = 0;
                while(true)
                {
                    Console.WriteLine("输入评分,以-1结束");
                    i = int.Parse(Console.ReadLine());
                    if(-1 != i)
                    {
                        a1.Add(i);
                    }
                    else
                    {
                        break;
                    }
                }
            }
    
            /// <summary>
            /// 删除最大最小分数
            /// </summary>
            public void Del()
            {
                if(a1.Count > 2)
                {
                    a1.Sort();
                    a1.RemoveAt(0);
                    a1.RemoveAt(a1.Count - 1);
                }
            }
            
            /// <summary>
            /// 求平均分
            /// </summary>
            /// <returns>返回平均分</returns>
            public double Average()
            {
                double sum = 0;
                foreach (int  i in a1)
                {
                    sum += i;                
                }
                return sum / a1.Count;
            }
    
        }
    }

    当然这个类的命名我命的不太好,一般以“I”开头的是是声明的接口,这里我就不管了,这个类实现的是把数组最值去掉,然后算平均分,下面的代码是主函数:

    namespace IArraylIst
    {
        class Program
        {
            //评委平均分 ,去掉最高和最低
            static void Main(string[] args)
            {
                Score s = new Score();
                s.AddMark();
                s.Del();
                s.Average();
                Console.WriteLine($"平均分为{s.Average()}");
                Console.ReadLine();
              
            }
        }
    }

    这样的把这个程序的功能和方法类单独写是不是很友好,是不是看着很方便, 因为我给我的小伙伴们培训的时候,他们习惯把 主函数和方法写到一个 .cs文件里面去,主函数的代码量贼多,看着乱,让代码看着顺眼是封装的一个小甜点,其主要功能是把该放到一起的代码,整理到一起。类似于以前我写项目链接数据库时写的 SqlHelper.cs 的类,把程序与后台数据库交互的方法单独写到一起,这样有利于开发。

    继承

    :继承是软件复用的一种形式。使用继承可以复用现有类的数据和行为,为其赋予新功能而创建出新类。节省开发时间,重用经过实践检测和调试的高质量代码,提供系统的质量。在现有类(基类、父类)上建立新类(派生类、子类)的处理过程称为继承。派生类能自动获得基类的除了构造函数和析构函数以外的所有成员,可以在派生类中添加新的属性和方法扩展其功能。

    这句话就简单了,继承是依托于封装的一个好东西,为什么好呢,我们从故事开始:

    话说啊,在村东头有个老刘头,他遗传了他祖上传下来的技能:说话。他儿子厉害了,他儿子小刘比他多一项技能,什么呢?吹牛皮。老刘头的孙子可就更厉害了,他不但继承了老刘头的说话,还继承了他爹小刘的吹牛皮,更是把吹牛皮发扬光大,变成了把牛皮吹上了天。

    故事完了,你说老刘那里我是不是只写一个 说话的方法(speak)就可以了啊,小刘我是不是要写一个继承他爹老刘头的 speak 还要再写一个说谎(TellLie)的方法?那小小刘是不是要写一个speak和telllie好要在写个 Tell_Big_Lie的方法?

    这样代码的冗余度是不是在小小刘那里就体现出来了, 因为他爷爷老刘头的speak方法他们刘氏祖孙三代都会啊,而且内容一样啊。把代码复写,是不是比较烦躁,令人头疼,所以我么可以把利用继承,把他们能传下来的方法继承下来,这些方法我就可以不写了。例如:

    namespace Inheritance
    {
        class Granson :Father
        {
            public string Tell_Big_Lie()
            {
                return "我是小小刘,我会把牛吹上天";
            }
        }
    }
    namespace Inheritance
    {
        class Father :GrandFather
        {
            public string Tell_Lie()
            {
                return "我是小刘,我会吹牛";
            }
        }
    }
    namespace Inheritance
    {
        class GrandFather
        {
            public string Speak()
            {
                return "我是老刘头,我会说话";
            }
        }
    }

    类似于这样的,因为时间有限,我先将一点点,其余的有时间再写

  • 相关阅读:
    SharePoint Portal Server与SharePoint Services之间的关系
    配置Microsoft Visual SourceSafe 2005的局域网/Internet访
    Maven创建Web项目(idea)
    Maven入门(idea)
    Windows下搭建Vue脚手架CLI
    关于wince中的全屏显示
    ubuntu右键添加打开终端的快捷菜单[转]
    将CString转换成string ...
    090606日记
    Java中的InputStream和OutputStream
  • 原文地址:https://www.cnblogs.com/qzdd/p/11743279.html
Copyright © 2011-2022 走看看