惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy International News Feed
I
Intezer
T
Tenable Blog
S
Schneier on Security
Project Zero
Project Zero
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
Know Your Adversary
Know Your Adversary
博客园 - 司徒正美
The Cloudflare Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
News and Events Feed by Topic
博客园 - 叶小钗
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题
aimingoo的专栏
aimingoo的专栏
S
Secure Thoughts
Forbes - Security
Forbes - Security
T
The Exploit Database - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
罗磊的独立博客
IT之家
IT之家
H
Hacker News: Front Page
I
InfoQ
云风的 BLOG
云风的 BLOG
S
Security Affairs
M
MIT News - Artificial intelligence
GbyAI
GbyAI
Jina AI
Jina AI
Help Net Security
Help Net Security
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
Attack and Defense Labs
Attack and Defense Labs
The Register - Security
The Register - Security
V
V2EX
G
Google Developers Blog
D
DataBreaches.Net
Apple Machine Learning Research
Apple Machine Learning Research
C
Cybersecurity and Infrastructure Security Agency CISA
J
Java Code Geeks
W
WeLiveSecurity
Cloudbric
Cloudbric
T
Tor Project blog

博客园 - wzc998

Oracle Audit 关于"cannot perform a DDL, commit or rollback inside a query or DML" 错误 关于varchar2在pl/sql和schema级别的最大值 ORA-01031 权限不足错误的解决 通过代码备份存储过程,package body 和表数据 并还原 XSL ASP .net实现松耦合事件的三种方法 Log4net不同版本在app.config和web.config的配置区别 SQL*Loader FAQ 【转】NLS 视图的研究 oracle多语言环境下to_date时间转换问题 【转】如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程 【转】SQL SERVER 存储过程学习笔记 委托与接口的关系 IOC 【转】范式 【转】oracle范式与交叉表 oracle存储过程返回交叉表(使用存储过程/高级语言调用)
【转】代码复用原则:合理使用类组合和类继承
wzc998 · 2010-08-30 · via 博客园 - wzc998

继承和组合都可以达到代码复用的目的,但是组合比继承更具灵活性。
组合是通过引用已有类(一般为抽象类)或接口来实现复用的组合在运行时通过多态可以动态替换被组合的对象。
继承是通过以子类继承父类方式来使父类的非私有成员可以被其子类使用。继承在类编译时就确定了继承来的方法和

属性,无法在运行时动态改变从父类继承来的方法。如果继承得来的某个方法在子类中不适用,这时就需要重写该方

法。而这样又很有可能违反LSP设计原则。如果父类非私有成员发生了改变那么继承他的子类也不得不发生改变父类改

变。所以这种复用方式仅限于行为上的IS-A关系时才使用.

网络的例子:

t:如果你要用到一个类中的所有方法但还想多几个方法(你自己写)一起用,你有什么方法实现,
s:一般我会直接继承它,估计是答错了,能否继续把你的话说完。

t: 就单个实现来说没有正确错误之分  
   
  你如果是用继承来解决这个问题就是采用了高耦合的手段  
   
  也就是说子类B包含了超类A,子类B对超类A有强的依赖性  
继续:  
  当B对A的依赖性是稳定的,用继承不会有任何问题  
   
  但当B有变心,希望有一个长得象A,但是某些实现上与A有所不同的伙伴的话,由于是继承就不行了。也就是A与B都

要重新定义  
   
  如果我们最初就发现了B比较花心,那就不用继承,用聚合来完成  
  也就是B中包含A的实例变量,由B的构造函数传入A的实例  
   
  那只要写个A的子类A1  

  在实例B的时候传入不同的A就行