继承和组合是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编程思想中提供了一个简单的判断方法,就是在考虑“真的需要向上转型吗?”。
来源;http://www.cnblogs.com/zhisuoyu/p/5270926.html
时间: 2024-10-23 16:28:59