Writer      :BYSocket(泥沙砖瓦浆木匠)

一、回顾继承

常见的如下:

1、依赖(”uses-a“)

2、聚合(”has-a“)

3、继承(”is-a“)类之间关系

也就是UML类图中常见的三种关系,另外常见的还有实现(接口与实现类的关系),组合等。

继承,即“is-a”关系,是一种表示特殊与一般的关系。比如,女人(特殊)是一个人(一般)。关键字extends表明正在构造的新类派生于一个存在的类。

1、已经存在的类称为 超类父类或者基类

2、新类被称为 子类或者派生类

有时候看着人家源码的设计。比如常见的接口,紧接着抽象类实现接口,然后继承该抽象类的各种实现:

一般都是这样的,行为总则都写着顶层接口抽象类实现了下面各个实现类公用的方法和字段实现类各自实现功能

但里面这些究竟怎么用呢?比如继承在什么前提下使用,什么场景前提下,下面就是思考后的小结:(Think , Write & Do)

二、继承何时用?怎么用

也就是说,继承设计使用的时候,有哪些技巧,有哪些需要注意的地方。

1、公共的方法和字段才放在基类(也就是父类)

这句话可能有争议,太过于吹毛求兹或者是严格。拿女人和人的问题来说,比如名字字段、age都可以放在基类人上面,但女人的那些第二特征就是独有了。

但有些时候的例子总是很疑惑:比如Java工程师实习生和Java工程师,看样子可以“实习生”extends “Java工程师”,然后很多Java工程师上的字段都是不属于Java实习生的。顾两者并没有上面太大关系,可能都是从属于一个父类—工程师。下面类关系图才是正确的:

子类对父类的继承是包括了父类的公有和受保护的方法和字段。但子类只需要继承父类的一部分,就没辙了。这时候记住一句话:“多用组合,少用继承”。

2、protect并不能保护父类

其实protect机制在父类并不能起到好的保护。子类可以在需要的的时候访问父类。但是继承无限制,即子类的子类… 无止境的。如果想侵入父类protect方法,只需要写个类,继承任意子类就可访问。二者,同一个包下能访问。

从上面也可以总结出:

3、在继承父类的方法与字段都有意义的时候,选择继承。否则,不要使用继承。

4、在覆盖父类中的行为(方法)时,不要偏离最初的设计内涵。

父类的方法实现或者定义都是指定了一种行为的内涵。所以继承父类的时候,有个重写override)方法可以改变子类的行为。但请不要改变其定义的内涵。源码中常见的有:比如 IO 中的 read write方法和Servlet中 的 get post。

5、继承与组合、多态

继承,子类与父类在编译期就能确定其对象。而组合或者是多态,在运行期就才能确定其对象,相比之下,组合多态达到了更多的灵活性。但,运行期未知的错误是要注意处理的。

顾,“多用组合,少用继承”。

三、本文小结

继承的一点一滴。泥瓦匠,这软文小结,难免有错误。欢迎指正讨论。

欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

微         博:BYSocket  豆         瓣:BYSocket  FaceBook:BYSocket  Twitter    :BYSocket

初探设计:Java继承何时用?怎么用?相关推荐

  1. java build path entries 为空_同事的代码简直没法看,我来教你如何更优雅的设计Java异常...

    点击上方蓝色字体,选择"设为星标" 回复"666"获取面试宝典 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的 ...

  2. 教你如何更优雅的设计Java异常

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:lrwinx https://lrwinx.github.i ...

  3. 如何优雅的设计java异常

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:lrwinx https://lrwinx.github.i ...

  4. Week04-面向对象设计与继承

    Week04-面向对象设计与继承 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 重载 static 静态 final 继承和多态 类型判定与类型转换 抽象类 1.2 尝试使用 ...

  5. struts2前台获取setattribute为空指针异常_告诉你,这样设计 Java 异常更优雅,更牛逼!...

    来源:Lrwin lrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据 ...

  6. 如何优雅的设计 Java 异常

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:推荐 8 个常用 Spring Boot 项目个人原创+1博客:点击前往,查看更多 作 者:Lrwin 来 源: ...

  7. 「万字图文」史上最姨母级Java继承详解

    原创公众号:「bigsai」 除公众号以外拒绝任意擅自转载 文章收录在bigsai公众号和回车课堂 课程导学 在Java课堂中,所有老师不得不提到面向对象(Object Oriented),而在谈到面 ...

  8. java继承层次结构,在状态模式中实现继承层次结构 - java

    我有一个与此非常相似的设计: 这里的NewOrder,Registered&Granted都有通用方法AddOrderline()和Cancel(),因此将这两种方法重构为父类很容易. 当我要 ...

  9. 受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学

    来源:Lrwinlrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自 ...

  10. 面试官 | 如何优雅的设计Java 异常?

    作者 | lrwinx 来源 | lrwinx.github.io 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问. 异常的类别 正如我们所知道的,java中的异常的 ...

最新文章

  1. VSEARCH操作实战-免费使用无内存限制的USEARCH!
  2. RecyclerView滑动到指定位置,并置顶
  3. 网络缓存 峰值 linux,Linux Page Cache调优在Kafka中的应用
  4. Java中将List中的值赋给另一个List几种方法实现
  5. CentOS 初体验二十:压缩包形式安装redis
  6. layui按钮展开、_layui框架,点击某个按钮,让layui的日期插件选中的值清空
  7. 【CodeForces - 195A】Let's Watch Football (追及问题,模拟)
  8. Python协程--生成器(实现多任务)
  9. OPPO 正式发布 ColorOS 7,“轻”装上阵带来多项亮眼新功能……
  10. 49 CO配置-控制-获利能力分析-把控制范围分配给经营范围
  11. 为什么手机网速太慢_为什么不同的5G手机网速差别高达47%!
  12. java我的世界光影推荐_最棒的7款我的世界光影水反效果包
  13. 使用 onpropertychange 和 oninput 检测 input、textarea输入改变
  14. 第二届广东省大学生网络攻防大赛 pyre
  15. mysql套接字连接_无法通过Remote上的套接字连接到本地MySQL服务器
  16. 手机b站封面提取网站_B端网站SEO优化思路:外链SEO与站内SEO优化结合才有效
  17. 现在有100块钱,一只公鸡5块,一只母鸡3块,三个小鸡1块。现在让你用100块钱买到100只鸡(大小不限)运用循环,和if语句实现
  18. 执行vite run dev时的spawn error问题
  19. Linux小实验11|添加组group,添加用户aa、bb并加入group组 (2)新建文件/abc.txt (3)设置用户aa对文件拥有读、写和执行权限
  20. STM32cube 控制 AIP650 TM1650

热门文章

  1. 手机网页css字体,CSS深入浅出-动态REM(手机专用)
  2. 测试第十七届智能车竞赛信标灯-初步测试
  3. Java删除指定文件夹下的文件和目录
  4. jquery.dataTables.min.js: Uncaught TypeError: Cannot read property 'style' of undefined
  5. 学python最重要的是_为什么越来越多的人选择学Python?
  6. swiper 定义放多少张图片_swiper轮播问题之二:默认显示3张图片,中间显示全部两边显示部分...
  7. 用python实现视频换脸_超简单使用Python换脸实例
  8. python3 语法再学习
  9. java opencv bp网_基于Opencv自带BP网络的车标简易识别
  10. cesium 设置时间_Cesium之地形制作与合并