面向对象特性分析大全集

news2024/11/27 12:47:49

面向对象特性分析

    • 先进行专栏介绍
  • 面向对象总析
    • 前提小知识
    • 分类
    • 浅析封装
    • 浅析继承
    • 浅析多态
    • 面向对象编程优点
      • a
      • b
      • c
    • 核心思想
    • 实际应用
    • 总结
  • 封装概念详解
    • 关键
    • 主要目的
    • 核心思想
    • 优点
      • 1
      • 2
    • 缺点
      • 1
      • 2
    • Java代码实现封装特性
  • 继承概念详解
    • 语法示例
    • 关键
    • 主要目的
    • 核心思想
    • 优点
      • 1
      • 2
    • 缺点
      • 1
      • 2
    • Java代码实现继承特性
  • 多态概念详解
    • 关键
      • 继承
      • 方法重写
    • 主要目的
      • 灵活性
      • 可扩展性
      • 可维护性
      • 总结
    • 核心思想
      • 继承
      • 方法重写
      • 父类引用变量
      • 动态绑定
      • 总结
    • 优缺点
      • 优点
        • 代码灵活性
        • 可扩展性
        • 可维护性
        • 提高代码复用性
      • 缺点
        • 运行时开销
        • 难以理解和调试
        • 限制于父类或接口的方法
      • 总结
    • Java代码实现多态特性
      • 程序分析
    • 三大特性总结
      • 封装(Encapsulation)
      • 继承(Inheritance)
      • 多态(Polymorphism)
      • 总结

先进行专栏介绍

本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。
在这里插入图片描述
在这里插入图片描述

面向对象总析

面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它通过将数据和操作封装在对象中,以模拟真实世界中的实体和其相互作用。面向对象编程的核心概念包括类、对象、继承、封装和多态性等。

前提小知识

在面向对象编程中,类是对象的蓝图或模板,它定义了对象的属性和行为。对象是类的实例,它具有类定义的属性和行为。通过创建类的实例,我们可以使用对象来执行特定的操作和访问其属性。
在这里插入图片描述

分类

封装、继承、多态

浅析封装

封装是面向对象编程的一个重要概念,它指的是将数据和操作封装在对象中,并通过公共接口来访问和操作这些数据。封装可以隐藏对象的内部实现细节,使得对象的使用者只需关注对象提供的接口,而不需要了解其具体实现细节。这种封装性有助于提高代码的可维护性和重用性。

浅析继承

继承是面向对象编程中的另一个重要概念,它允许一个类继承另一个类的属性和方法。通过继承,我们可以创建一个新的类,并从父类中继承其属性和方法,同时还可以添加新的属性和方法。继承可以提高代码的复用性,并且有助于创建层次结构和抽象概念。

浅析多态

多态性是面向对象编程的另一个关键概念,它允许不同的对象对同一个消息做出不同的响应。多态性可以通过方法的重写和方法的重载来实现。方法的重写指的是子类重写父类的方法,以实现特定的行为。方法的重载指的是在同一个类中定义多个具有相同名称但参数列表不同的方法,以适应不同的调用需求。

面向对象编程优点

a

它提供了一种组织和管理代码的有效方式,使得代码更易于理解和维护。

b

面向对象编程可以提高代码的重用性,通过继承和多态性,我们可以更好地利用已有的代码来创建新的功能。

c

面向对象编程还可以提高代码的可扩展性和灵活性,使得我们能够更加容易地修改和扩展现有的代码。

核心思想

将现实世界中的事物抽象成对象,并通过对象之间的交互来实现程序的功能。

实际应用

面向对象编程被广泛应用于各种编程语言和领域。许多流行的编程语言,如Java、C++和Python等,都支持面向对象编程。面向对象编程在软件开发过程中起到了重要的作用,它可以帮助开发人员更好地组织和管理代码,提高代码的可维护性和可重用性。

总结

面向对象编程是一种强大的编程范式,它通过将数据和操作封装在对象中,以模拟真实世界中的实体和其相互作用。面向对象编程的核心概念包括类、对象、继承、封装和多态性等。面向对象编程具有许多优点,包括代码的可维护性、重用性、可扩展性和灵活性。在实际应用中,面向对象编程被广泛应用于各种编程语言和领域,为软件开发过程带来了许多好处。

封装概念详解

封装是面向对象编程中的一个重要概念,它允许我们将数据和操作封装在一个单独的实体中,以便于管理使用。封装的概念在软件开发中非常常见,它提供了一种将相关数据和方法组织在一起的方式,从而提高了代码的可维护性可重用性

关键

将数据和方法封装在一个类中。类是面向对象编程的基本构建块,它定义了一组属性和方法,用于描述对象的特征和行为。通过将相关的数据和方法放在一起,我们可以更好地组织代码,并将其作为一个独立的实体进行管理。

主要目的

隐藏对象的内部实现细节,只暴露必要的接口供外部使用。这种隐藏使得对象的使用者不需要了解对象的内部工作原理,从而降低了代码的复杂性和耦合度。封装还可以提供数据的安全性,通过限制对数据的直接访问,只允许通过指定的方法来进行操作,从而避免了数据被误用或破坏。

核心思想

将数据和方法进行封装,以隐藏内部的实现细节。通过封装,我们可以将数据和方法放在一个类中,并将其对外部进行保护,只暴露必要的接口给其他类或模块使用。这样做的好处是,我们可以控制数据的访问权限,防止外部直接修改或破坏数据的一致性。

优点

1

封装可以提高代码的可维护性可复用性。通过将属性和方法封装在类的内部,我们可以隐藏实现细节,使得类的使用者只需要关注公共接口而不需要了解内部实现。这种抽象屏蔽了具体的实现细节,使得代码更易于理解和维护。此外,封装还可以促进代码的重用,因为可以将类作为一个独立的模块,在不同的项目中重复使用。

2

封装可以提高代码的安全性可靠性。通过将属性设置为私有(private)或受保护(protected),我们可以限制对其的访问和修改。这样可以有效地防止外部代码直接修改属性的值,从而保护数据的完整性。此外,通过封装,我们可以在属性或方法的访问和修改过程中添加验证逻辑,确保数据的有效性和一致性。

缺点

1

封装可能增加代码的复杂性。封装的过程中,我们需要设计合理的类结构和接口,这需要一定的设计和分析能力。

2

封装还会引入一定的性能开销。由于封装需要通过方法调用来访问属性和方法,而不是直接访问,这可能会导致一定的性能损失。因此,在性能敏感的场景中,需要权衡封装带来的开销和代码的可维护性。
在这里插入图片描述

Java代码实现封装特性

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    public void sayHello() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }
}

在这里插入图片描述

继承概念详解

继承是面向对象编程中的一种重要概念,它允许一个类(称为子类)继承另一个类(称为父类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在父类的基础上添加、修改或覆盖功能,从而实现代码的复用和扩展。

语法示例

class SubClass(ParentClass):
    # 子类的

关键

子类会继承父类的所有属性和方法,包括公共属性和方法、私有属性和方法。子类可以直接访问父类的属性和方法,也可以通过重写(覆盖)父类的方法来改变其行为。

主要目的

实现代码的重用模块化,提高代码的复用性和可维护性。同时,继承还可以实现代码的扩展和定制,以及实现多态的效果。通过继承,可以更好地组织和管理代码,提高代码的可读性和可维护性。

核心思想

继承的核心思想是通过父类和子类之间的关系,实现代码的重用和扩展。通过继承,子类可以继承父类的属性和方法,并且可以在父类的基础上添加、修改或覆盖功能。这样可以实现代码的复用和扩展,提高代码的可读性和可维护性。同时,继承还可以实现多态的效果,使得不同的对象对同一个消息做出不同的响应。

优点

1

代码的重用和模块化。通过继承,子类可以继承父类的属性和方法,无需重新编写相同的代码。这样可以提高代码的复用性和可维护性,减少代码的冗余

2

继承也支持多层次的继承关系。一个类可以同时作为父类和子类,从而形成一个继承的层次结构。子类可以继承父类的属性和方法,并且可以作为其他类的父类,从而形成更复杂的继承关系。

缺点

1

继承可能导致之间的耦合性增加,子类与父类之间的关系变得紧密。这可能会导致代码的理解和维护的难度增加。

2

滥用继承可能导致继承层次过深、继承链过长,使得代码变得复杂和难以管理。因此,在设计和使用继承时需要谨慎考虑,避免过度继承和继承滥用的情况。
在这里插入图片描述

Java代码实现继承特性

// 定义一个父类Animal
class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println(name + " is eating.");
    }

    public void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 定义一个子类Dog,继承自Animal
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void bark() {
        System.out.println(name + " is barking.");
    }
}

// 定义一个子类Cat,继承自Animal
class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    public void meow() {
        System.out.println(name + " is meowing.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("旺财");
        dog.eat();  // 继承自父类Animal
        dog.sleep();  // 继承自父类Animal
        dog.bark();  // 子类Dog新增的方法

        Cat cat = new Cat("咪咪");
        cat.eat();  // 继承自父类Animal
        cat.sleep();  // 继承自父类Animal
        cat.meow();  // 子类Cat新增的方法
    }
}

在上面的代码中,我们定义了一个父类Animal和两个子类Dog和Cat。子类Dog和Cat继承了父类Animal的属性和方法,并且可以在父类的基础上添加新的方法。

多态概念详解

多态是面向对象编程中的一个重要概念,它允许不同的对象对同一个消息做出不同的响应。多态通过继承和方法重写来实现。

关键

两个关键点:继承方法重写

继承

子类继承了父类的属性和方法,包括父类的公共、受保护和默认访问权限的方法。子类可以直接使用父类的方法,无需重新编写相同的代码。

方法重写

子类可以重写父类的方法,即在子类中定义一个与父类中同名、参数列表相同的方法。通过方法重写,子类可以根据自身的需求重新定义父类的方法。当通过父类的引用调用该方法时,实际执行的是子类中重写的方法。

主要目的

多态的主要目的是实现代码的灵活性可扩展性可维护性

灵活性

通过多态,可以根据实际的对象类型来调用相应的方法。这样可以根据不同的需求和场景,动态地选择不同的实现方式,从而使代码更加灵活。

可扩展性

通过继承和方法重写,子类可以在不修改父类代码的情况下,通过扩展父类的行为来实现自己的功能。这样可以方便地添加新的子类,并且可以在不影响原有代码的情况下进行功能的扩展。

可维护性

通过多态,可以将相同的操作应用于不同的对象,从而减少代码的重复。这样可以提高代码的可读性和可维护性,减少代码的冗余和复杂度。

总结

多态可以使代码更加灵活、可扩展和可维护,从而提高代码的质量效率。它是面向对象编程中一个重要的概念,也是实现面向对象设计原则中的开闭原则和单一职责原则的关键手段之一。

核心思想

核心思想是"一个接口,多种实现",即通过使用父类或接口的引用变量来引用不同子类的对象,从而实现对不同子类的统一操作。

继承

子类继承父类的属性和方法,可以重写父类的方法或添加新的方法。

方法重写

子类可以重写父类的方法,即在子类中重新定义和实现和父类同名的方法。

父类引用变量

可以使用父类或接口的引用变量来引用子类的对象,从而实现对不同子类的统一操作。

动态绑定

在运行时根据对象的实际类型来确定调用哪个方法,实现动态绑定。

总结

提高代码的灵活性、可扩展性和可维护性。通过多态,可以根据实际的对象类型来调用相应的方法,从而动态地选择不同的实现方式。这样可以方便地添加新的子类,并且可以在不影响原有代码的情况下进行功能的扩展。同时,多态还可以减少代码的重复,提高代码的可读性和可维护性。

优缺点

优点

代码灵活性

多态允许使用父类或接口的引用变量来引用不同子类的对象,从而实现对不同子类的统一操作。这样可以根据实际的对象类型来调用相应的方法,使代码更加灵活。

可扩展性

通过继承和方法重写,子类可以在不修改父类代码的情况下,通过扩展父类的行为来实现自己的功能。这样可以方便地添加新的子类,并且可以在不影响原有代码的情况下进行功能的扩展。

可维护性

通过多态,可以将相同的操作应用于不同的对象,从而减少代码的重复。这样可以提高代码的可读性和可维护性,减少代码的冗余和复杂度。

提高代码复用性

多态可以使代码更加通用,可以通过父类或接口的引用变量来引用不同子类的对象,从而实现对不同子类的统一操作。这样可以减少代码的重复,提高代码的复用性。

缺点

运行时开销

由于多态需要在运行时根据对象的实际类型来确定调用哪个方法,因此会引入一定的运行时开销。这可能会导致一定的性能损失。

难以理解和调试

多态的使用可能会增加代码的复杂性,特别是在涉及多层继承和多个接口的情况下。这可能会增加代码的理解和调试的难度。

限制于父类或接口的方法

通过多态,只能调用父类或接口中定义的方法,无法直接调用子类特有的方法。如果需要调用子类特有的方法,需要进行类型转换。

总结

多态是一种非常有用的特性,可以提高代码的灵活性、可扩展性和可维护性。然而,多态的使用也需要权衡性能和复杂性等因素。在合适的情况下,合理使用多态可以带来很多好处。

在这里插入图片描述

Java代码实现多态特性

// 定义一个父类 Animal
class Animal {
    public void sound() {
        System.out.println("动物发出声音");
    }
}

// 定义子类 Dog 继承自 Animal
class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("狗发出汪汪声");
    }
}

// 定义子类 Cat 继承自 Animal
class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("猫发出喵喵声");
    }
}

// 测试代码
public class PolymorphismExample {
    public static void main(String[] args) {
        // 创建一个 Animal 对象,并调用其 sound 方法
        Animal animal = new Animal();
        animal.sound(); // 输出:动物发出声音

        // 创建一个 Dog 对象,并调用其 sound 方法
        Dog dog = new Dog();
        dog.sound(); // 输出:狗发出汪汪声

        // 创建一个 Cat 对象,并调用其 sound 方法
        Cat cat = new Cat();
        cat.sound(); // 输出:猫发出喵喵声

        // 使用父类的引用变量来引用不同子类的对象
        Animal animal1 = new Dog();
        animal1.sound(); // 输出:狗发出汪汪声

        Animal animal2 = new Cat();
        animal2.sound(); // 输出:猫发出喵喵声
    }
}

程序分析

在上述示例中,定义了一个父类 Animal,并在其内部定义了一个 sound 方法。然后分别定义了两个子类 Dog 和 Cat,并在子类中重写了 sound 方法,分别输出狗发出汪汪声和猫发出喵喵声。

三大特性总结

封装(Encapsulation)

封装是将数据和相关的操作封装在一个单元中,通过定义类来实现。封装隐藏了内部的实现细节,只暴露必要的接口给外部使用。这样可以提高代码的安全性和可维护性,同时也方便了代码的复用和扩展。

继承(Inheritance)

继承是指一个类可以派生出另一个类,派生类继承了父类的属性和方法,并可以添加自己的特定实现。继承允许代码重用,提高了代码的可维护性和扩展性。通过继承,可以建立类之间的层次关系,使得代码更加结构化和易于理解。

多态(Polymorphism)

多态是指同一个方法可以在不同的对象上产生不同的行为。多态通过方法的重写和方法的重载来实现。多态提高了代码的灵活性和可扩展性,使得程序可以根据不同的对象类型执行不同的操作。通过多态,可以编写更加通用和灵活的代码,提高了代码的可读性和可维护性。

总结

这三个特性共同构成了面向对象编程的核心,它们通过将代码组织成类和对象的结构,使得代码更加模块化、可重用和可扩展。面向对象编程的优势在于它能够更好地建模现实世界的问题,并提供了一种更加直观和可靠的开发方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1052863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

elasticsearch+logstash+kibana整合(ELK的使用)第一课

一、安装elasticsearch 0、创建目录,统一放到/data/service/elk 1、下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-linux-x86_64.tar.gz2、解压 tar -xzvf elasticsearch-7.1.0-linux-x86_64.tar.gz3、新建用户和组…

蓝桥等考Python组别八级005

第一部分&#xff1a;选择题 1、Python L8 &#xff08;15分&#xff09; 运行下面程序&#xff0c;输出的结果是&#xff08; &#xff09;。 i 1 while i < 4: print(i, end ) i 1 1 2 30 1 2 31 2 3 40 1 2 3 4 正确答案&#xff1a;C 2、Python L8 &#…

详解分布式搜索技术之elasticsearch

目录 一、初识elasticsearch 1.1什么是elasticsearch 1.2elasticsearch的发展 1.3为什么学习elasticsearch? 1.4正向索引和倒排索引 1.4.1传统数据库采用正向索引 1.4.2elasticsearch采用倒排索引 1.4.3posting list ​1.4.4总结 1.5 es的一些概念 1.5.1文档和字段 …

排序篇(二)----选择排序

排序篇(二)----选择排序 1.直接选择排序 基本思想&#xff1a; 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 直接选择排序: ​ 在元素集合array[i]–array[…

【Idea】idea、datagrip设置输入法

https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5 下载后解压并重命名为 jbr, 然后替换对应 ide…

SpringBoot使用Docker并上传至DockerHub

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 1.系列文章2.构建docker镜像的方式3.docker操作3.1 安装docker3.2 查看docker镜像3.3 本地运行docker3.4 修改tag3.5 推送docker镜像3.6 远端server拉取d…

SPSS列联表分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件可在个人主页—…

玩转数据-大数据-Flink SQL 中的时间属性

一、说明 时间属性是大数据中的一个重要方面&#xff0c;像窗口&#xff08;在 Table API 和 SQL &#xff09;这种基于时间的操作&#xff0c;需要有时间信息。我们可以通过时间属性来更加灵活高效地处理数据&#xff0c;下面我们通过处理时间和事件时间来探讨一下Flink SQL …

信号类型(雷达)——脉冲雷达(四)

系列文章目录 《信号类型&#xff08;雷达通信&#xff09;》 《信号类型&#xff08;雷达&#xff09;——雷达波形认识&#xff08;一&#xff09;》 《信号类型&#xff08;雷达&#xff09;——连续波雷达&#xff08;二&#xff09;》 《信号类型&#xff08;雷达&…

浏览器输入 URL 并回车发生了什么

本文节选自我的博客&#xff1a;浏览器输入 URL 并回车发生了什么 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是MilesChen&#xff0c;偏前端的全栈开发者。&#x1f4dd; CSDN主页&#xff1a;爱吃糖的猫&#x1f525;&#x1f4e3; 我的博客&#xff1a;爱吃糖…

建站软件WordPress和phpcms体验

一、网站程序 什么是网站程序? 网站程序是由程序员编写的一个网站安装包,程序是网站内容的载体。 常见的网站程序有: dedecms , phpcms ,帝国cms ,米拓cms , WordPress , discuz , ECShop ,shopex , z-blog等,根据不同类型的网站我们来选择不同的网站程序。 比如说搭建一个…

格拉姆角场GAF将时序数据转换为图像,可以应用于故障诊断等多个领域

效果 2.代码(这里用随机生成的数据来模拟一维振动信号,利用格拉姆角场GAF将时序数据转换为图像,并划分为训练集和测试集,最后利用SVM分类) # -*- coding: utf-8 -*- """ Created on Sat Sep 30 21:35:36 2023@author: pony """import nump…

5自由度雄克机械臂仿真描点

5自由度雄克机械臂仿真描点 任务 建立雄克机械臂的坐标系和D-H参数表&#xff0c;使用Matlab机器人工具箱&#xff08;Robotics Toolbox&#xff09;&#xff0c;用机械臂末端执行器触碰8个红色的目标点。 代码 %% 机器人学 format compact close all clear clc%% DH参数 L…

算法基础课第二部分

算法基础课 第四讲 数学知识AcWing1381. 阶乘(同余&#xff0c;因式分解) 质数AcWing 866. 质数的判定---试除法AcWing 868. 质数的判定---埃氏筛AcWing867. 分解质因数---试除法AcWing 197. 阶乘---分解质因数---埃式筛 约数AcWing 869. 求约数---试除法AcWing 870. 约数个数-…

JUnit介绍

JUnit是用于编写和运行可重复的自动化测试的开源测试框架&#xff0c; 这样可以保证我们的代码按预期工作。JUnit可广泛用于工业和作为支架(从命令行)或IDE(如Eclipse)内单独的Java程序。 JUnit提供&#xff1a; 断言测试预期结果。 测试功能共享通用的测试数据。 测试套件轻…

【Django 笔记】第一个demo

1. pip 安装 2. django 指令 D:\software\python3\anconda3\Lib\site-packages\django\bin>django-adminType django-admin help <subcommand> for help on a specific subcommand.Available subcommands:[django]checkcompilemessagescreatecachetabledbshelldiff…

【C++学习】多态

目录 一、多态的概念 1. 概念 二、多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 三、抽象类 3.1 概念 3.2 接口继承和实现继承 四、多态的原理 4.1 虚函数表 4.2 多态的…

【JavaEE初阶】 计算机是如何工作的

文章目录 &#x1f332;计算机发展史&#x1f38b;冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;&#x1f38d;CPU 基本工作流程&#x1f4cc;逻辑门&#x1f388;电子开关 —— 机械继电器(Mechanical Relay)&#x1f388;门电路(Gate Circuit)NOT GATE&…

排序算法之【快速排序】

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

关于RabbitMQ你了解多少?

关于RabbitMQ你了解多少&#xff1f; 文章目录 关于RabbitMQ你了解多少&#xff1f;基础篇同步和异步MQ技术选型介绍和安装数据隔离SpringAMQP快速入门Work queues交换机Fanout交换机Direct交换机Topic交换机 声明队列和交换机MQ消息转换器 高级篇消息可靠性问题发送者的可靠性…