java的继承和组合
2024-10-19 08:14:45
继承和组合是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编程思想中提供了一个简单的判断方法,就是在考虑“真的需要向上转型吗?”。
最新文章
- 无法启动";D\projects\hello\Debug\hello.exe"; 系统找不到指定的文件。[LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏]
- SDRAM,DRAM,SRAM,DDR的概念
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
- IO调度器(二) IO的中断返回
- 元素设置position:fixed属性后IE下宽度无法100%延伸
- CentOS 6.5下Git服务器搭建
- Tyvj 1085 派对
- vector.resize 与 vector.reserve的区别 .xml
- NetFlow
- multipathd dead but pid file exists
- MySQL备份说明
- linux使用crontab实现PHP执行定时任务
- isupper()函数
- 一张表搞清楚php is_null、empty、isset的区别
- spring的定时器
- windows下安装bpython方法 (新)
- ASP .NET Core HTTP Error 502.5 – Process Failure
- JAVA中接口与抛出异常的相关知识
- PAT A1059
- ExpandoObject对象的JSON序列化
热门文章
- gulp打包详解
- 【odoo14】第十三章、网站开发(对外服务)
- [笔记] 扩展Lucas定理
- 推荐模型DeepCrossing: 原理介绍与TensorFlow2.0实现
- python-3-1
- Android Studio中Switch控件有关 thumb 和 track 用法
- [Azure Devops] 使用 Azure Repos 管理代码
- Docker安装完成后启动报错:Failed to start Docker Application Container Engine
- Redis 超详细的手动搭建Cluster集群步骤
- Spring Cloud 升级之路 - 2020.0.x - 1. 背景知识、需求描述与公共依赖