怎么样去理解抽象类

假如很多人要买水果吃,吃的动作只有一个,但是有的人要用现金买,有的人用信用卡,有的人赊帐。要为每个人定义一个类,就要定义多个相同的吃的方法。如果定义一个抽象类,在里面实现吃的方法,再做一个买的抽象方法。那每个人的类都从这个抽象类派生下来,只要实现买的方法即可,吃的方法就可以直接用父类的方法了。如果要改吃的方法就不用改多个,只要改这个抽象类里的就行了。

一个接口:

  public interface IGrabber
    {
        /// <summary>
        /// 是否可用。
        /// </summary>
        bool Enabled
        {
            get;
            set;
        }

        /// <summary>
        /// 抓取器名。
        /// </summary>
        string Name
        {
            get;
            set;
        }

        /// <summary>
        /// 源字符串最大长度。
        /// </summary>
        uint MaxSourceLength
        {
            get;
            set;
        }

        /// <summary>
        /// 源字符串最小长度。
        /// </summary>
        uint MinSourceLength
        {
            get;
            set;
        }

        /// <summary>
        /// 抓取。
        /// </summary>
        /// <param name="source">要抓取的源。</param>
        /// <param name="target">抓取结果。</param>
        /// <returns>是否抓取成功。</returns>
        bool Grab(string source, out string[] targets);

        /// <summary>
        /// 抓取。
        /// </summary>
        /// <param name="source">要抓取的源。</param>
        /// <param name="targets">抓取结果。</param>
        /// <returns></returns>
        bool Grab(IList<Keys> source, out string[] targets)

一个抽象类:

  public abstract class BaseGrabber : IGrabber
    {
        #region IGrabber成员。

        public virtual bool Enabled
        {
            get;
            set;
        }

        public virtual string Name
        {
            get;
            set;
        }

        public virtual uint MaxSourceLength
        {
            get;
            set;
        }

        public virtual uint MinSourceLength
        {
            get;
            set;
        }

        public abstract bool Grab(string source, out string[] targets);

        public abstract bool Grab(IList<Keys> source, out string[] targets);

        #endregion

        /// <summary>
        /// 是否重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。
        /// </summary>
        public virtual bool IsRestructured
        {
            get;
            set;
        }

        protected BaseGrabber()
        {
            this.Name = this.GetType().Name;
            this.MinSourceLength = 0;
            this.MaxSourceLength = 256;
            this.Enabled = true;
            this.IsRestructured = true;
        }

        /// <summary>
        /// 重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public virtual string RestructureSource(string source)
        {
            return source;
        }

        /// <summary>
        /// 重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public virtual IList<Keys> RestructureSource(IList<Keys> source)
        {
            int count = source.Count;
            for (int i = 0; i < count; i++)
            {
                Keys key = source[i];
                switch (key)
                {
                    case Keys.Back:
                        source.RemoveAt(i);
                        source.RemoveAt(i - 1);
                        i -= 2;
                        count -= 2;
                        break;
                }
            }
            return source;
        }

终于搞明白了,还是上面那个例子说的是在。从接口到抽象类,在从抽象类到类,在类到对象。这就是面向对象。

下面是有关抽象类的一些基本感念:

抽象类与抽象方法由abstract修饰

抽象方法没有方法体

抽象类的派生类必须实现抽象方法体

抽象类只能作为基类,无法实例化。

重点就在于无法实例化,而且为了代码的清晰度,方便以后修改。

怎么样去理解抽象类

时间: 2024-10-16 03:12:09

怎么样去理解抽象类的相关文章

换种思路去理解设计模式(下)

开写之前,先把前两部分的链接贴上.要看此篇,不许按顺序看完前两部分,因为这本来就是一篇文章,只不过内容较多,分开写的. 换种思路去理解设计模式(上) 换种思路去理解设计模式(中) 8       对象行为与操作对象 8.1     过程描述 所谓对象行为和操作对象,需要三方面内容: l  操作过程: 一般表现为一个方法.该方法接收一个对象或者组合类型的参数,然后对这个对象或者组合进行操作,例如修改属性.状态或者结构等. l  操作的对象或组合: 会作为实参传入操作过程,会被操作过程修改属性.状态

MFC中的DC CDC HDC由来由去理解

MFC中的DC CDC HDC由来由去理解 在此非常感谢博客主的究竟钻研,非常详细的参考资料:http://blog.csdn.net/yam_killer/article/details/7661449

网站外链数量的变化可以从哪几点去理解

自从绿萝算法推出以后,百度对外链的打击力度更大了,每一次搜索引擎算法调整之后,网站的收录和链接数量都会有不同程度的变化.网站外链数量的变化可以从哪几个方面去考虑呢,一起来分析一下. 首先搜索引擎会对过期了的网站来一个大扫除,删除一部分收录或者反链. 反链页面权重高的话,那么这个反链会长久的在搜索引擎数据库中.如果你做反链的网站被降权,那么你的链接也就会跟着降权的网站被删除,严重的情况还会影响到你的网站. 从自己的网站去分析,如果网站标题写的不好,这对网站也是有很大影响的.如果一个页面的标题存在关

用《捕鱼达人》去理解C#中的多线程

参考:http://www.cnblogs.com/maitian-lf/p/3678128.html 用<捕鱼达人>去理解C#中的多线程,布布扣,bubuko.com

按自己的想法去理解事件和泛型(C#)

上一篇那些年困扰我们的委托(C#)讲了委托,这一篇自然就轮到事件了. 不喜欢官方的表达方式,喜欢按照自己的想法去理解一些抽象的东西,我是一个喜欢简单怕麻烦的人. 事件 考虑到委托使用的一些缺陷,就有了事件.委托是不安全的,打个比方,如果把委托当作共有字段,那么事件就相当于是属性的概念. 事件就是被限制使用的委托变量,事件里面封装了一个多播委托. 事件语法:public event 委托类型 事件名; 事件的作用:事件的作用与委托变量一样,只是功能上比委托变量有更多的限制.比如:只能通过+=或者-

从认知角度去理解设计

设计并不是一味只求美感或者感觉,设计同样是一门建立在多学科基础上的科学,从认知角度来理解设计能帮助我们设计出更多尊重用户的作品,这样的设计才能经得起时间的考验,让更多用户所喜爱. 下面是我对<认知与设计——理解ui设计准则>这本书的概要与理解. 一.影响我们感知的因素     a. 经验影响感知: 我们根据经验对事物的预想:先入为主的主观印象往往影响感知,当我们带有    不同的主观感受去观察同一张图片时会看到不同的东西 我们的认知框架:认知框架即是不断置身的各种环境在我们心智中建立起开模式,

用代码截图去理解MVC原理

[概述] 看了蒋金楠先生的<Asp.Net Mvc框架揭密>,这本书详细地讲解了mvc的原理,很深奥也很复杂,看了几遍才将就明白了一点.他在第一章用了一个他自己写的mvc框架作为例子,代码看着有点多,所以为了帮助理解,我想用截图的方式一步一步地描述mvc的流程,本人能力有限,写的不好,还望大家包涵.如果蒋老师看到这篇文章,也希望能对我理解错误的地方进行指正. 一.先在web.config中注册自定义的HttpModule 二.输入网址 三.添加默认的路由规则 四.注册PostResolveRe

从有限状态机的角度去理解Knuth-Morris-Pratt Algorithm(又叫KMP算法,”看毛片“算法)

转载请加上:http://www.cnblogs.com/courtier/p/4273193.html 在开始讲这个文章前的唠叨话: 1:首先,在阅读此篇文章之前,你至少要了解过,什么是有限状态机,什么是KMP算法,因为,本文是从KMP的源头,有限状态 机来讲起的,因为,KMP就是DFA(Deterministic Finite Automaton)上简化的. 2:很多KMP的文章(有限自动机去解释的很少),写得在我看来不够好,你如果,没有良好的数学基础就很难去理解他们(比如下图), 因为,你

从逆向的角度去理解C++虚函数表

很久没有写过文章了,自己一直是做C/C++开发的,我一直认为,作为一个C/C++程序员,如果能够好好学一下汇编和逆向分析,那么对于我们去理解C/C++将会有很大的帮助,因为程序中所有的奥秘都藏在汇编中,很多问题我们从表面上无法看出到底是为什么,只要用逆向工具一分析,很快就能知道其中的所以然来.我们都知道虚函数表是放在类对象的最前面,但是很多人并不知道虚函数表的第一项存放的是什么,下面我用IDA分析一下C++的虚函数调用,从汇编的角度去理解虚函数.此文只适合具有逆向分析基础的读者,如果没有逆向分析