当前位置: > 财经>正文

组合与继承的区别联系 外汇的购买和玩法的区别和联系是什么

2023-09-06 06:44:40 互联网 未知 财经

组合与继承的区别联系

参考:https://blog.csdn.net/qq_31655965/article/details/54645220 https://blog.csdn.net/zh15732621679/article/list/2?t=1&

组合

优点:

1.- 不破坏封装,整体类与局部类之间松耦合,彼此相对独立 2.- 具有较好的可扩展性 3.- 支持动态组合。在运行时,整体对象可以选择不同类型的局部对象 4.- 整体类可以对局部类进行包装,封装局部类的接口,提供新的接口

缺点:

1.- 整体类不能自动获得和局部类同样的接口 2.- 创建整体类的对象时,需要创建所有局部类的对象

继承

优点:

1.代码复用 2.子类可重写父类的方法 3.创建子类对象时,无需创建父类的对象,子类自动拥有父类的成员变量和行为。 4.子类在父类的基础上可根据自己的业务需求扩展

缺点:

1.- 破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性

为什么破坏了封装呢? 原因:封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。如下例子中父类Fruit中有成员变量weight。Apple继承了Fruit之后,Apple可直接操作Fruit类的成员变量,因此破坏了封装性!/** * Created by huan on 2018/3/5. * 继承--父类 */public class Fruit { //成员变量 public double weight; public void info(){ System.out.println("我是一个水果!重" + weight + "g!"); }}/** * Created by huan on 2018/3/5. * 继承--子类 */public class Apple extends Fruit { public static void main(String[] args){ Apple a = new Apple(); a.weight = 10; a.info(); }}

2.- 支持扩展,但是往往以增加系统结构的复杂度为代价 5.- 不支持动态继承。在运行时,子类无法选择不同的父类 (原因:因为继承是编译期就决定下来的,无法在运行时改变) 6.- 子类不能改变父类的接口

组合与继承的相关区别具体阐述:

在继承结构中,父类的内部细节对于子类是可见的。所以我们通常也可以说通过继承的代码复用是一种 白盒式代码复用。(如果基类的实现发生改变,那么派生类的实现也将随之改变。这样就导致了子类行为的不可预知性)

组合是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能。因为在对象之间,各自的内部细节是不可见的,所以我们也说这种方式的代码复用是黑盒式代码复用 。(因为组合中一般都定义一个类型,所以在编译期根本不知道具体会调用哪个实现类的方法)

继承在写代码的时候就要指名具体继承哪个类,所以,在编译期就确定了关系。(从基类继承来的实现是无法在运行期动态改变的,因此降低了应用的灵活性。)

组合,在写代码的时候可以采用面向接口编程。所以,类的组合关系一般在运行期确定。

组合(has-a)关系可以显式地获得被包含类(继承中称为父类)的对象,而继承(is-a)则是隐式地获得父类的对象,被包含类和父类对应,而组合外部类和子类对应。

组合是在组合类和被包含类之间的一种松耦合关系,而继承则是父类和子类之间的一种紧耦合关系。

当选择使用组合关系时,在组合类中包含了外部类的对象,组合类可以调用外部类必须的方法,而使用继承关系时,父类的所有方法和变量都被子类无条件继承,子类不能选择。

最重要的一点,使用继承关系时,可以实现类型的回溯,即用父类变量引用子类对象,这样便可以实现多态,而组合没有这个特性。

还有一点需要注意,如果你确定复用另外一个类的方法永远不需要改变时,应该使用组合,因为组合只是简单地复用被包含类的接口,而继承除了复用父类的接口外,它甚至还可以覆盖这些接口,修改父类接口的默认实现,这个特性是组合所不具有的。

从逻辑上看,组合最主要地体现的是一种整体和部分的思想,例如在电脑类是由内存类,CPU类,硬盘类等等组成的,而继承则体现的是一种可以回溯的父子关系,子类也是父类的一个对象。

这两者的区别主要体现在类的抽象阶段,在分析类之间的关系时就应该确定是采用组合还是采用继承。

引用网友的一句很经典的话应该更能让大家分清继承和组合的区别:组合可以被说成“我请了个老头在我家里干活” ,继承则是“我父亲在家里帮我干活”。

组合对比继承的区别与联系?

1.继承结构,子类可以获得父类内部实现细节,破坏封装。组合结构:整体不能看到部分的内部实现细节,不会破坏封装 2.继承模式是单继承,不支持动态继承,组合模式可以支持动态组合 3.继承结构中,子类可以回溯父类,直到Object类,这样就可以根据业务实现多态(向上转型和向下转型) ,组合中不可以实现多态 4.在开发 过程中,如果复用的部分不会改变,为了安全性和封装的本质,应该使用组合,当我们不仅需要复用,而且还可能要重写或扩展,则应该使用继承

如何选择?

两个类之间,明显的存在整体和部分的关系,则应该使用组合来实现复用,当我们需要对已有类做一番改造,从而得到新的符合需求的类,则应该使用继承

当需要被复用的类一定不会改变时,应该使用组合,否则,应该使用继承

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。