在面向对象的设计领域里,有很多设计思路,主要有三种:is-a、has-a、like-a

这三种在java的类、接口、抽象类中很多体现,下面简述一下其定义。

1.Is-a(继承关系)

  • is-a,顾名思义,“是一个”,是一种继承关系。

如果A is-a B,那么B就是A的父类。

一个类完全包含另一个类的所有属性及行为。

例如PC机是计算机,工作站也是计算机,PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。

2.Has-a(从属关系)

  • has-a,顾名思义,“有一个”,代表从属关系。

如果A has a B,那么B就是A的组成部分。

同一种类的对象,通过它们的属性的不同值来区别。

例如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。

3.like-a(组合关系)

  • like-a,顾名思义,"像一个",代表组合关系。

如果A like a B,那么B就是A的接口。

新类型有老类型的接口,但还包含其他函数,所以不能说它们完全相同。

例如一台手机可以说是一个微型计算机,但是手机的通讯功能显然不是计算机具备的行为,所以手机继承了计算机的特性,同时需要实现通讯功能,而通讯功能需要作为单独接口,而不是计算机的行为。

4.is-a,has-a,like-a如何应用

  1. 如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承。
  2. 如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类。
  3. 如果你确定两件对象之间是like-a的关系,那么此时你应该使用组合;比如空调继承于制冷机,但它同时有加热功能,那么你应该把让空调继承制冷机类,并实现加热接口。

最新文章

  1. imx6 关闭调试串口
  2. Mysql导入导出非常慢解决办法
  3. Inverted sentences
  4. Monkey for iOS(CrashMonkey4IOS)
  5. css3 自定义动画(2)位置的移动
  6. 支持向量机通俗导论(理解SVM的三层境界)
  7. '[linux下tomcat 配置
  8. [JIT_APP]Android SQLite简介
  9. iOS_38_手势
  10. JavaScript随记汇总
  11. Bootstrap登录样式
  12. 初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)
  13. php.ini 中文详解
  14. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)
  15. Python基础和原反补码及表达式
  16. CSS3常用
  17. 知识点:Mysql 索引原理完全手册(2)
  18. robotframework 远程连接数据库问题
  19. [Chrome_Error] (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING 与 nginx 502 bad gateway
  20. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap

热门文章

  1. SpringBoot自动装配-Condition
  2. 高效JAVA之用静态工厂方法代替构造器
  3. bugku-misc 9-16
  4. 一份热乎的字节跳动客户端面经,已拿Offer
  5. Java时间类从此变得清晰明了
  6. MIT6.828 La5 File system, Spawn and Shell
  7. JVM内存调整
  8. SQL语法 - SELECT 语句
  9. Thread类中yield方法
  10. k8s 执行 ingress yaml 文件报错: error when creating "ingress-myapp.yaml": Internal error occurred: failed calling webhook