知识大全 我对抽象类和接口的理解

Posted

篇首语:人生来就不是为了被打败的,人能够被毁灭,但是不能够被打败。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 我对抽象类和接口的理解相关的知识,希望对你有一定的参考价值。

  MSDN 抽象类是从子类发现了公共的东西 泛化(也可以说把公共的东西单独提取出来)出父类 然后子类继承父类 而接口是根本不知道子类的存在 方法如何实现还不确定 预先定义的

  有一个人 他叫王麻子 那年 他生了个儿子 起名叫 王三 这个时候用程序来描述就是他和他老婆创建了一个对象 代码如下

  public class WangSan string FirstName string Sex void CanDo()

   Console WriteLine( 我是王三 我会画画 ) 王三有 姓 性别 和一个能力 他会画画

  又过了一年 王麻子和他老婆又生了个孩子 起名叫 王四 用程序来说 他们俩又创建了一个对象

  public class WangSi string FirstName string Sex void CanDo()

   Console WriteLine( 我是王四 我会唱歌 ) 王四也有 姓 性别和一个能力 他会唱歌

  假如一下 假如他们是印度人 对计划生育没什么限制 他们每隔几年都会再生个孩子出来 这样的话 如果要用程序来描述起来岂不是很麻烦 所以这个时候我们应该考虑对代码进行重构 提取共同的部分 也就是姓名 性别和一个能力

  如下

  public abstract class Son protected string FirstName protected string Sex 因为他们都是王麻子的孩子 咱们假设一下 假设由于他们都是王麻子的孩子 所以他们必须 姓王 有性别 所以这个 基类 Son 就必须声明为  abstract 的(创建就为被继承) 就是说凡是 王麻子的孩子 都必须继承自 Son 这个基类 因为他们都有王麻子的一些特性和自己的特性

  比如

  public class WangSan Son 我们不必在 WangSan 这个类中写任何代码 因为他是王麻子的孩子 所以他有 姓 和 性别……在New WangSan 这个对象的时候 他就自动的有了 FirstName 和 Sex 这些属性

  又假如 由于王麻子是个全能人才 所以他的孩子必须会一项技术 比如游泳或者 唱歌 这个时候 基类就可以修改一下

  public abstract class Son protected string Name protected string Sex /// <summary> /// 抽象类中的抽象方法 在子类中必须自行实现/// </summary> public abstract void CanDO() 添加了 CanDo 的抽象方法 这样 当 王三 这个对象一被创建 他就必须继承 Son 这个类(他必须是王麻子的儿子 莫非两口子生的孩子是别人的??)……而又由于Son 中有个抽象的方法 CanDo 所以 王三 他必须 得有一项技术 如果不实现 CanDo 编译不通过(你不实现 就不能说明你是我孩子 以后我对你不好!)

  public class WangSan Son public override void CanDO()

   Console WriteLine( 我是王三 王麻子的孩子 我必须有一个擅长 那我选择唱歌 ) 这样 王三也必须会一项长处了!!

  王四也是一样 只要他是 王麻子的儿子 他就必须实现 CanDo 方法 并且有FirstName 和 Sex属性

  又假如有一天 王麻子偷师学艺 学会水上漂 但是他不知道谁愿意学 又不想强迫孩子们 所以他让孩子们自己决定 他定义了一个接口(发布了一个规范) IShuiShangPiao

  interface IShuiShangPiao void CanFly() 谁想学 就来我这里报道 结果王武想学 所以王武来报道了(程序解释就是王武实现这个接口)

  public class WangWU Son IShuiShangPiao public override void CanDO()

   throw new NotImplementedException() /// <summary> /// 实现接口(报道) 老爸就教我水上漂/// </summary> public void CanFly()

   throw new NotImplementedException() 回到我们软件开发当中 假设以上类是我们程序中实现的一项功能 假如某一天 我们发现(或者客户要求) 凡是王麻子的孩子都必须会英语 这个时候 我们就仅仅只需要在 Son 这个类中 增加一个会说英语的方法 他的孩子们就都会说英语了 如果不采用继承的话 假设王麻子有 万个孩子 那就得修改一万个类 很累……

  以上就是我个人针对 抽象类和 接口的理解 如有不当之处 敬请提出!

  程序需要慢慢重构 这个我当时理解起来也非常不容易 多练习 多思考就会豁然开朗!

cha138/Article/program/Java/hx/201311/26168

相关参考

知识大全 Java抽象类和接口的比较

Java抽象类和接口的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 C#中抽象类和接口的区别与使用

C#中抽象类和接口的区别与使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一抽象类  抽象类

知识大全 抽象类和方法

  在我们所有乐器(Instrument)例子中基础类Instrument内的方法都肯定是伪方法若去调用这些方法就会出现错误那是由于Instrument的意图是为从它衍生出去的所有类都创建一个通用接口

知识大全 黑马程序员之接口(interface)

接口interface  初期理解可以认为是一个特殊的抽象类  当抽象类中的方法都是抽象的那么该类可以通过接口的形式来表示  class用于定义类  interface用于定义接口接口定义时格式特点 

知识大全 抽象类对象类和对象包装类

抽象类   继承层越高类就更通用并且更抽象有些层中的祖先类非常通用更适于作为其他类的框架而不适于作为具体类来使用其特定实例    

知识大全 选择Java接口还是抽象类

选择Java接口还是抽象类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!     选择Java接口

知识大全 java中 接口与抽象类的区别

  语法层次上的区别  ()创建方法  viewplainprint?  abstractclass 抽象类名{  }interface接口名{  }  ()内容  抽象类里面可以有属性和方

知识大全 C#接口和抽象类技术特点浅析

C#接口和抽象类技术特点浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一C#抽象类  C#

知识大全 接口和抽象类有什么区别

  作者Allen   抽象方法是必须实现的方法就象动物都要呼吸但是鱼用鳃呼吸猪用肺呼吸   动物类要有呼吸方法怎么呼吸就是子类的事了   现在有很多讨论和建议提倡用interface代替abstra

知识大全 抽象类(abstract class)和接口(interface)

  java中的abstractclass和interface  abstractclass和interface是Java语言中对于抽象类定义进行支持的两种机制正是由于这两种机制的存在才赋予了Java