继承和组合是java中非常常用的两种创建新类型的方法,两者都能提高代码的复用率。

继承主要是想让子类继承父类的基本特性;组合技术通常用于想在新类中使用现有类的功能,而非它的接口。两者的分别是"IS A"和"HAS A"的关系

继承:

class Shape {
public void draw() {
System.out.println("draw a shape");
} public void erase() {
System.out.println("erase");
}
} class Square extends Shape {
@Override
public void draw() {
System.out.println("draw a Square");
} public static void main(String[] args) {
Square s = new Square();
s.draw();
s.erase();
}
}

组合:

class Draw {
public void draw() {
System.out.println("draw");
}
} class Erase {
public void erase() {
System.out.println("erase");
}
} class Work {
public void work() {
new Draw().draw();
new Erase().erase();
} public static void main(String[] args) {
new Work().work();
}
}

一、相比于组合,继承有以下优点:

1、在继承中,子类自动继承父类的非私有成员(default类型视是否同包而定),在需要时,可选择直接使用或重写。

2、在继承中,创建子类对象时,无需创建父类对象,因为系统会自动完成;而在组合中,创建组合类的对象时,通常需要创建其所使用的所有类的对象。

二、组合的优点:

1、在组合中,组合类与调用类之间低耦合;而在继承中子类与父类高耦合。

2、可动态组合。

总结:

虽然继承是OOP的一大特性,但很多时候并不推荐使用,因为它常常容易使结构复杂化,容易出错。因此,除非我们确信使用继承会使程序效率最高,否则,不考虑使用它,

这也是六大设计原则之一的合成复用原则。

那我们该如何判断是否应该使用继承呢?在java编程思想中提供了一个简单的判断方法,就是在考虑“真的需要向上转型吗?”。

最新文章

  1. 无法启动"D\projects\hello\Debug\hello.exe" 系统找不到指定的文件。[LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏]
  2. SDRAM,DRAM,SRAM,DDR的概念
  3. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
  4. IO调度器(二) IO的中断返回
  5. 元素设置position:fixed属性后IE下宽度无法100%延伸
  6. CentOS 6.5下Git服务器搭建
  7. Tyvj 1085 派对
  8. vector.resize 与 vector.reserve的区别 .xml
  9. NetFlow
  10. multipathd dead but pid file exists
  11. MySQL备份说明
  12. linux使用crontab实现PHP执行定时任务
  13. isupper()函数
  14. 一张表搞清楚php is_null、empty、isset的区别
  15. spring的定时器
  16. windows下安装bpython方法 (新)
  17. ASP .NET Core HTTP Error 502.5 – Process Failure
  18. JAVA中接口与抛出异常的相关知识
  19. PAT A1059
  20. ExpandoObject对象的JSON序列化

热门文章

  1. gulp打包详解
  2. 【odoo14】第十三章、网站开发(对外服务)
  3. [笔记] 扩展Lucas定理
  4. 推荐模型DeepCrossing: 原理介绍与TensorFlow2.0实现
  5. python-3-1
  6. Android Studio中Switch控件有关 thumb 和 track 用法
  7. [Azure Devops] 使用 Azure Repos 管理代码
  8. Docker安装完成后启动报错:Failed to start Docker Application Container Engine
  9. Redis 超详细的手动搭建Cluster集群步骤
  10. Spring Cloud 升级之路 - 2020.0.x - 1. 背景知识、需求描述与公共依赖