本文主要讲几个涉及到继承方面的重构,继承一般会涉及到抽象类,接口,我们通常把有相似Func的类提取同类项,也就是抽象出接口或者抽象类;这样做的好处不言而喻,可以方便的扩展,修改,维护子类的共有方法,属性,索引等等。使用基类不仅仅是把各个子类联系起来了,更是降低了各个子类间的耦合度,再次体现了面向接口、继承编程的思想。
  1.提升方法:指将方法向继承链的上层迁移的过程。

   用法场景:当子类A中的一个方法需要被多个子类调用的时候,需要把这个方法提升到基类中,而不能让其它的子类都去Call子类A中的这个方法。这样做唯一的缺点是扩充了基类的接口、增加了其复杂性,因此需谨慎使用。只有当一个以上的子类需要使用该方法时才需要进行迁移。

  2.下放方法:指将方法向继承链的下层迁移的过程。

   用法场景:此重构和上面的方法正好相反,当基类中的某个方法只需要被一个或少数几个子类实现的时候,可以考虑把基类中的方法下放到适合的子类中,避免引起不必要的混淆。

  3.提升属性:指将属性向继承链的上层迁移的过程。

   用法场景:和上移方法类似,这里只不过把方法改成了属性,把大多数子类需要用的属性提升到基类中。

  4.下放属性:指将属性向继承链的下层迁移的过程。

   用法场景:和提升属性的方法正好相反,把只有个别子类需要用到的属性下放。

  下面为对这四种重构方法的代码演示。

publicabstractclass Vehicle
{
  publicstring Driver { get; set;} //提升属性:所有的交通工具都有驾驶员
  publicvoid Turn()
{
//提升方法:所有的交通工具都可以转向
}
}
publicclass Car : Vehicle
{

}
publicclass Plane : Vehicle
{
  publicvoid Fly()
  {
    //下放方法:只有飞机才可以飞
  }
}
publicclass Ship : Vehicle
{
  publicstring Anchor { get; set; } //下放属性:只有船才有锚
}

  注意,在这里所有的方法和类,都可以在子类中使用new 关键字重新描述,合理的放置继承中方法,属性,字段的位置是个非常重要的重构方法,简单好用:)

转载于:https://www.cnblogs.com/ywsoftware/archive/2013/02/05/2892642.html

与继承相关的一些重构(一)相关推荐

  1. C# - 为引用类型重定义相等性 - 继承相关

    派生类 这是上面Citizen类的一个子类: 下面我重写object.Equals() 方法: 大部分逻辑都在base.Equals()方法里了,首先如果父类的Equals()方法返回false,那么 ...

  2. 一文读懂JS继承相关知识点

    一文读懂JS继承相关知识点 Javascript 面向对象编程(一):封装 一. 生成实例对象的原始模式 二. 原始模式的改进 三. 构造函数模式 四.构造函数模式的问题 五. Prototype模式 ...

  3. Java继承相关练习

    一.选择 A D C B C C B ABD D D C C 二.编程 1.编程练习:某公司要开发"XX车行管理系统",请使用面向对象的思想,设计自定义类描述自行车.电动车和三轮车 ...

  4. java-类(class)继承,重写,重构,抽象,接口等

    类的继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { }class 子类 extends 父类 { } 为什么需要继承 ...

  5. 5.继承相关的小知识

    文章目录 1. 多态 2. 子类强转与抽象创建 3. equals原则 4. 反射编写泛型数组 5. 继承的设计技巧 1. 多态 什么是多态?是不是被面试官这样问道过. 用书中的话来讲,一个对象变量可 ...

  6. php+只能继承一次,php继承相关的一个问题

    原因是这样的,你B继承了A,test这个方法你继承下来了,但是test本身是在A类里面的,也就是说,你继承了test,但是test依旧是属于A的,那么此时test里的$this指的就是A这个对象. 如 ...

  7. 面试官问:JS的继承

    原文作者若川,掘金链接:https://juejin.im/post/5c433e216fb9a049c15f841b 写于2019年2月20日,现在发到公众号声明原创,之前被<前端大全> ...

  8. 系统重构的原则代码重构的原则

    作者:[美]马丁•福勒(Martin Fowler) 译者:熊节, 林从羽 前一章所举的例子应该已经让你对重构有了一个良好的感觉.现在,我们应该回头看看重构的一些大原则. ##2.1 何谓重构 一线的 ...

  9. 见山只是山,见水只是水——提升对继承的认识

    见山只是山 见水只是水--提升对继承的认识 作者:温 昱 本文发布于<CSDN开发高手> 封装.继承.多态是OO 的三大特性,由此可见继承思想的重要性.但是,不少人对继承的理解过多地局限在 ...

最新文章

  1. 【非专业评测】发蜡、发膏、发泥、发油、啫喱、发膜、发胶、干胶、发棒、摩丝
  2. exce中让两列数据一一对应_工作中被重复数据所烦恼?学会这几个Excel技巧,少加班...
  3. python行为识别_牛!Python 也能实现图像姿态识别溺水行为了
  4. 来阿里前 vs 来阿里后
  5. 第12章:项目采购管理(2)-章节重点
  6. java jsonobject.parse_JSON.parseObject的几种用法
  7. 站覆盖范围_武汉高铁站落地灯箱广告有什么投放价值?
  8. HandlerThread原理和实际应用
  9. 插件中对动态表单数据模型进行赋值实现动态表单数据绑定
  10. LeetCode-9.回文数(大括号+双目运算符使用)
  11. 高中判断函数图像的题_高中数学常用函数图像
  12. 微信小程序英文版:实现一键切换中英双语版(已组件化)
  13. 计算机查看正在运行的程序,win7系统查看当前正在运行程序状态的方法
  14. 已知直线方程,计算直线对应的向量
  15. IE8打开网页慢速度优化
  16. 什么是IMS(IP多媒体子系统)
  17. Spring AOP(获取入参和返回值)及其原理:动态代理
  18. sublime text 编译时提示[WinError 2] 系统找不到指定的文件。
  19. ubuntu20.04设置为中文
  20. 哈哈,手把手教你撸一个在线网盘(附源码)!

热门文章

  1. Async/await 和 Promises 区别
  2. thinkphp5部署于Linux中nginx多站点解决方案
  3. [Note] FrameFab Interesting Cut Results
  4. SharePoint 2013 版本功能对比
  5. 延展公司受邀参加圣象集团信息化建设年度总结会议
  6. 亚马逊EC2构建代理服务器心血历程
  7. 【网络编程】网络协议简析
  8. 【unity】Inspector视图中的get/set使用(四)
  9. 数据库lib7第2, 3题(创建索引和触发器)
  10. ThinkPHP RBAC官网的例子详解