【JAVA】十三、基础知识“接口”精细讲解!(二)(新手友好版~)

        哈喽大家好呀qvq,这里是乎里陈,接口这一知识点博主分为三篇博客为大家进行讲解,今天为大家讲解第二篇java中实现多个接口,接口间的继承,抽象类和接口的区别知识点,更适合新手宝宝们阅读~更多内容持续更新中~

目录

1. 实现多个接口

完整代码讲解

 2. 接口间的继承

完整代码讲解

3. 抽象类和接口的区别

定义方式上不同

继承/实现方式不同

区别表格



1. 实现多个接口

        在Java中,接口(Interface)定义了一组抽象方法,用于规范类的行为。类和类之间是单继承的,一个类只能由一个父类,即java不支持类的多重继承,但是一个类可以实现多个接口,从而扩展类的功能;这种机制使得Java可以实现类似多重继承的效果。

        比如说:

  • 一个 Bird 类可以同时实现 Flyable 和 Run 这两个接口。

  • 一个 Smartphone 类可以同时实现 Callable(可打电话),Playable(可播放音乐)和 Photographable(可拍照)三个接口。

        像这样实现多个接口的话,我们可以更灵活地设计程序,避免单继承的限制,可以让类具备更多的功能~

首先,我们初步定义了一个狗狗类🐶继承动物类:

//建立一个动物抽象类:
//1.用abstract修饰,表示这是一个抽象类,不能直接创建实例
//2.包含了所有动物共有的属性和方法
public abstract class Animal {//公共属性名字和年龄(所有动物和植物都有的)public String name;public int age;//抽象方法:吃东西//1.用abstract修饰,没有具体的实现//2.所有的子类必须实现这个方法public abstract void eat();//动物类的构造方法public Animal(String name,int age) {this.name = name;this.age = age;}
}
//定义了一个狗狗类
//1.继承自动物类(extends Animal)
//2.必须实现父类的抽象方法eat()
public class Dog extends Animal{//狗狗的构造方法public Dog(String name, int age) {//通过super调用父类的构造方法初始化name和agesuper(name, age);}//实现父类的eat()方法@Override//表示重写public void eat() {System.out.println(name+"吃狗粮啦~");}
}

        写完上面代码后,我们知道狗狗不仅会游泳,也会跑步,则可以让这个狗狗类实现游泳接口和跑步接口(前提是定义了游泳和跑步的接口):

 定义的三个接口,狗狗只能实现里面的两个:

public interface Flyable {void fly();
}
public interface Running {void run();
}
public interface Swimming {void swim();
}
  • extends Animal 表示继承Animal类

  • implements Running, Swimming 表示实现两个接口,后面可通过逗号再添加几个狗狗能实现的接口

// Dog通过extends继承Animal并且通过implemens实现了Running和Swimming接口
public class Dog extends Animal implements Running,Swimming{...
}

在实现接口后,我们必须还要实现Running和Swimming接口里面的方法:

// Dog通过extends继承Animal并且通过implemens实现了Running和Swimming接口
public class Dog extends Animal implements Running,Swimming{//狗狗的构造方法public Dog(String name, int age) {//通过super调用父类的构造方法初始化name和agesuper(name, age);}//实现父类的eat()方法@Override//表示重写public void eat() {System.out.println(name+"吃狗粮啦~");}//实现Running接口的run()方法@Overridepublic void run() {System.out.println(name+"正在飞跑~");}//实现Swimming接口的swim()方法@Overridepublic void swim() {System.out.println(name+"正在狗刨~");}
}

        所以通过上面的代码我们实现了Dog类继承Animal类,然后通过implements实现了Running和Swimming两个接口我们要注意一定是先继承再实现接口如果把extends放后面是会产生错误的啦:

同样的,我们知道java中一个类只能继承一个类,若是再继承一个也会产生错误啦:

        那么我们说过解决多继承的问题,到底是怎么体现的呢?我们往下看,不妨假设一下,没有Running和Swimming这两个接口,而是Running和Swimming两个类,然后Dog再继承它们:

        很显然是不行的啦~怎么可以继承多个类呢,所以我们就需要接口,可以将我们这些规则的行为放到我们接口当中,这样就能解决多继承。很明显不是所有的动物都会飞,如果我们将Flyable放到我们Animal类里面,很明显是不合适的,狗狗是不会飞的。

        我们再定义一个鸟类继承父类Animal并通过implements实现Running和Flyable接口来观察

// Bird通过extends继承Animal并且通过implemens实现了Running和Flyable接口
public class Bird extends Animal implements Running,Flyable{//小鸟儿的构造方法public Bird(String name, int age) {//通过super调用父类的构造方法初始化name和agesuper(name, age);}//实现父类的eat()方法@Overridepublic void eat() {System.out.println(name+"吃鸟粮");}//实现Flyable接口的fly()方法@Overridepublic void fly() {System.out.println(name+"正在酷酷飞翔");}//实现Running接口的run()方法@Overridepublic void run() {System.out.println(name+"奋力疾走中");}
}

        很明显小鸟只能飞和跑,并不能游泳,所以鸟类只能实现Running和Flyable接口,不能实现Swimming接口~

🟢那么我们写下测试类

public class Test2 {//测试方法1 - 接收Animal类型参数;animal可以是Animal类或其任何子类的对象public static void test1(Animal animal) {// 调用动物的eat方法,具体执行哪个看实际传入对象类型// 例如:test1(new Dog()) 会调用Dog类的eat()// test1(new Cat()) 会调用Cat类的eat()animal.eat();}//测试方法2 - 接收Running接口类型参数//是任何实现了Running接口的对象public static void test2(Running running) {//调用传入对象的run()方法//只要对象实现了Running接口就能传入,不管它是什么具体类running.run();}//测试方法3 - 接收Swimming接口类型参数//是任何实现了Swimming接口的对象public static void test3(Swimming swimming) {//调用传入对象的swim()方法//可以接收任何"会游泳"的对象swimming.swim();}//测试方法4 - 接收Flyable接口类型参数//是任何实现了Flyable接口的对象public static void test4(Flyable flyable) {//调用传入对象的fly()方法//可以接收任何"会飞"的对象flyable.fly();}//第一个测试主方法 - 演示接口多态public static void main1(String[] args) {// 创建一只鸟对象,名字叫"愤怒的小鸟儿",年龄2岁Bird bird = new Bird("愤怒的小鸟儿",2);// 创建一只狗对象,名字叫"开心的小狗狗",年龄3岁Dog dog = new Dog("开心的小狗狗",3);// 测试test2方法 - 传入会跑步的对象test2(bird);// 让鸟儿跑步(Bird实现了Running接口)test2(dog);// 让狗狗跑步(Dog实现了Running接口)System.out.println("----------------");// 分隔线// 测试test3方法 - 传入会游泳的对象test3(dog);// 让狗狗游泳(Dog实现了Swimming接口)//⚠️不可以test3(bird);Bird没有实现Swimming接口System.out.println("----------------");// 分隔线// 测试test4方法 - 传入会飞的对象test4(bird);// 让鸟儿飞翔(Bird实现了Flyable接口)//⚠️不可以test4(dog);Dog没有实现Flyable接口}//第二个测试主方法 - 演示继承多态public static void main2(String[] args) {// 创建一只鸟对象,名字叫"愤怒的小鸟儿",年龄2岁Bird bird = new Bird("愤怒的小鸟儿",2);// 创建一只狗对象,名字叫"开心的小狗狗",年龄3岁Dog dog = new Dog("开心的小狗狗",3);// 测试test1方法 - 传入动物对象test1(bird);// 让鸟儿吃东西(调用Bird的eat方法)test1(dog);// 让狗狗吃东西(调用Dog的eat方法)// 这里因为Bird和Dog都是Animal的子类,所以都可以传入啦}
}

🌟 我们可以从上述代码得出以下的一些个人理解:

1. 多态是什么?

  • 就像同一个"动作"在不同对象上有不同表现
  • 例如:同样是"吃",鸟吃鸟粮,狗吃狗粮

2. 接口多态(main1演示)

  • test2( )中可以接受任何会跑步的对象实现了Running接口就可以)

  • 不管传入的是鸟还是狗,只要会跑步就行

3. 继承多态(main2演示)

  • test1( )可以接受任何动物对象(是Animal的子类)

  • 不管传入的是鸟还是狗,因为它们都是动物

4. 那么为什么这样设计呢?

  • 能提高代码灵活性:不需要为每种动物写单独的方法

  • 便于扩展:新增一些动物类型的时候不需要修改测试方法

⚠️还是再提一下:每个测试方法(test1-test4)的行为取决于:实际传入的对象类型,该对象对应方法的实现方式~


完整代码讲解

下面是完整版本的代码:附带超详细注释,更适合新手宝宝们阅读~

// 1. 首先定义接口
public interface Flyable {void fly();
}
public interface Running {void run();
}
public interface Swimming {void swim();
}// 2. 定义抽象父类
//建立一个动物抽象类:
//1.用abstract修饰,表示这是一个抽象类,不能直接创建实例
//2.包含了所有动物共有的属性和方法
public abstract class Animal {//公共属性名字和年龄(所有动物和植物都有的)public String name;public int age;//抽象方法:吃东西//1.用abstract修饰,没有具体的实现//2.所有的子类必须实现这个方法public abstract void eat();//动物类的构造方法public Animal(String name,int age) {this.name = name;this.age = age;}
}// 3. 定义具体实现类
// Bird通过extends继承Animal并且通过implemens实现了Running和Flyable接口
public class Bird extends Animal implements Running,Flyable{//小鸟儿的构造方法public Bird(String name, int age) {//通过super调用父类的构造方法初始化name和agesuper(name, age);}//实现父类的eat()方法@Overridepublic void eat() {System.out.println(name+"吃鸟粮");}//实现Flyable接口的fly()方法@Overridepublic void fly() {System.out.println(name+"正在酷酷飞翔");}//实现Running接口的run()方法@Overridepublic void run() {System.out.println(name+"奋力疾走中");}
}// Dog通过extends继承Animal并且通过implemens实现了Running和Swimming接口
public class Dog extends Animal implements Running,Swimming{//狗狗的构造方法public Dog(String name, int age) {//通过super调用父类的构造方法初始化name和agesuper(name, age);}//实现父类的eat()方法@Override//表示重写public void eat() {System.out.println(name+"吃狗粮啦~");}//实现Running接口的run()方法@Overridepublic void run() {System.out.println(name+"正在飞跑~");}//实现Swimming接口的swim()方法@Overridepublic void swim() {System.out.println(name+"正在狗刨~");}
}// 4. 定义测试类
public class Test2 {//测试方法1 - 接收Animal类型参数;animal可以是Animal类或其任何子类的对象public static void test1(Animal animal) {// 调用动物的eat方法,具体执行哪个看实际传入对象类型// 例如:test1(new Dog()) 会调用Dog类的eat()// test1(new Cat()) 会调用Cat类的eat()animal.eat();}//测试方法2 - 接收Running接口类型参数//是任何实现了Running接口的对象public static void test2(Running running) {//调用传入对象的run()方法//只要对象实现了Running接口就能传入,不管它是什么具体类running.run();}//测试方法3 - 接收Swimming接口类型参数//是任何实现了Swimming接口的对象public static void test3(Swimming swimming) {//调用传入对象的swim()方法//可以接收任何"会游泳"的对象swimming.swim();}//测试方法4 - 接收Flyable接口类型参数//是任何实现了Flyable接口的对象public static void test4(Flyable flyable) {//调用传入对象的fly()方法//可以接收任何"会飞"的对象flyable.fly();}//第一个测试主方法 - 演示接口多态public static void main1(String[] args) {// 创建一只鸟对象,名字叫"愤怒的小鸟儿",年龄2岁Bird bird = new Bird("愤怒的小鸟儿",2);// 创建一只狗对象,名字叫"开心的小狗狗",年龄3岁Dog dog = new Dog("开心的小狗狗",3);// 测试test2方法 - 传入会跑步的对象test2(bird);// 让鸟儿跑步(Bird实现了Running接口)test2(dog);// 让狗狗跑步(Dog实现了Running接口)System.out.println("----------------");// 分隔线// 测试test3方法 - 传入会游泳的对象test3(dog);// 让狗狗游泳(Dog实现了Swimming接口)//不可以test3(bird);Bird没有实现Swimming接口System.out.println("----------------");// 分隔线// 测试test4方法 - 传入会飞的对象test4(bird);// 让鸟儿飞翔(Bird实现了Flyable接口)//不可以test4(dog);Dog没有实现Flyable接口}//第二个测试主方法 - 演示继承多态public static void main2(String[] args) {// 创建一只鸟对象,名字叫"愤怒的小鸟儿",年龄2岁Bird bird = new Bird("愤怒的小鸟儿",2);// 创建一只狗对象,名字叫"开心的小狗狗",年龄3岁Dog dog = new Dog("开心的小狗狗",3);// 测试test1方法 - 传入动物对象test1(bird);// 让鸟儿吃东西(调用Bird的eat方法)test1(dog);// 让狗狗吃东西(调用Dog的eat方法)// 这里因为Bird和Dog都是Animal的子类,所以都可以传入啦}
}

最后的输出结果为:

愤怒的小鸟儿奋力疾走中  
开心的小狗狗正在飞跑~
----------------
开心的小狗狗正在狗刨~
----------------
愤怒的小鸟儿正在酷酷飞翔

 最后总结一下:

        上述代码展示了一个类继承一个父类,同时实现多种接口。继承表达的含义是 is-a,而接口表达的含义是具有某某特性。


 2. 接口间的继承

        想象你正在设计一个动物园管理系统。最初,你定义了Swimming(可游泳)和Flyable(可飞行)两个基础接口但随着系统发展,你发现有些鸟类既会飞又会潜水(比如企鹅)。这时候,就需要用到接口间的继承啦~重新定义一个接口,这个接口具备Swimming和Flyable这两个接口的功能,让这个新的接口继承Swimming接口和Flyable接口~

例如我们先定义三个接口:

//分别定义了两个个接口
//并分别定义了各自的抽象方法
interface A {void testA();
}
interface B {void testB();
}

这时候我们想要有一个接口,拥有A和B这两个接口的功能,则这样实现:

//有一个接口,具备A和C接口的功能,extends为扩展
interface C extends A,B {//C这个接口具备了B和C的功能,同时也有自己的抽象方法void testC();
}

那么当一个类实现我们C接口,需要重写A,B,C里的三个方法:

public class Test4 implements C{@Overridepublic void testA() {}@Overridepublic void testB() {}@Overridepublic void testC() {}
}

完整代码讲解

实现接口间继承示例完整的代码如下:

//分别定义了三个接口
//并分别定义了各自的抽象方法
interface A {void testA();
}
interface B {void testB();
}
//有一个接口,具备A和C接口的功能,extends为扩展
interface C extends A,B {//C这个接口具备了B和C的功能,同时也有自己的抽象方法void testC();
}
//实现子接口的类必须实现所有继承链上的抽象方法
public class Test4 implements C{@Overridepublic void testA() {}@Overridepublic void testB() {}@Overridepublic void testC() {}
}

        接口C通过extends关键字继承了接口A和B,通过上述代码我们可以总结出接口继承的特点:

  • 一个接口(C)可以继承多个父接口(A,B)
  • 子接口(C)可以继承所有父接口(A,B)的抽象方法
  • 子接口可以定义自己的新方法
  • 接口间的继承相当于把多个接口合并在一起

3. 抽象类和接口的区别

🔴java中抽象类和接口的区别,这是常见的面试题

抽象类和接口都是 Java 中多态的常见使用方式,我们需要知道:

"抽象类管是什么,接口管能做什么"

抽象类关注类的本质,接口关注行为扩展

定义方式上不同

// 抽象类 - 用abstract修饰
abstract class Animal {// 可以有具体属性String name;int age;// 可以有具体方法public void sleep() {System.out.println("动物在睡觉");}// 可以有抽象方法public abstract void eat(); 
}// 接口 - 用interface修饰
interface Swimmable {// 只能有常量(默认是public static final)int a = 5;// 只能有抽象方法(Java8前)void swim();
}

继承/实现方式不同

// 类继承抽象类(extends)
class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃狗粮");}
}// 类实现接口(implements)
class Fish implements Swimmable {@Overridepublic void swim() {System.out.println("鱼在游泳");}
}

区别表格

特性抽象类接口
关键字abstract classinterface
子类继承/实现使用extends关键字继承抽象类(单继承)使用implements关键字实现接口(多实现)
构造方法
结构组成普通类+抽象方法抽象方法+全局变量
设计理念"是什么"(is-a关系)"能做什么"(has-a能力)
适用场景有共同特征的类

定义类的行为规范

关系一个抽象类可以实现多个接口

接口不能继承抽象类,

但是可以使用extends继承多个父接口

那么我们该选择哪个使用,可以根据以下内容选择:

1. 用抽象类当

  • 多个类有共同属性和方法
  • 需要定义一些默认实现时
  • 例子:不同种类的鸟都有羽毛,都会飞,但飞行方式不同

2. 用接口当

  • 只想定义行为规范时
  • 需要类具备多种能力
  • 例子:鸭子既能游泳(Swimming)又跑(Running)

💡总结一下

        抽象类中可以包含普通方法和普通字段这样的普通方法和字段可以被子类直接使用(不必重写)。

       而接口中,不能包含普通方法子类必须重写所有的抽象方法比如此处的 Animal 中包含一个 name 这样的属性,这个属性在任何子类中都是存在的。因此此处的 Animal 只能作为一个抽象类,而不应该成为一个接口。

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

在这其中,也经常会有这些面试题: 

  • 一个类能同时继承类和实现接口吗?

可以的,先extends类后implements接口

  • 接口能继承类吗?

不能的,接口只能继承接口


制作不易,更多内容加载中~感谢友友们的点赞收藏关注~~

如有问题欢迎批评指正,祝友友们生活愉快,学习工作顺顺利利!

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

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

相关文章

基于MuJoCo物理引擎的机器人学习仿真框架robosuite

Robosuite 基于 MuJoCo 物理引擎,能支持多种机器人模型,提供丰富多样的任务场景,像基础的抓取、推物,精细的开门、拧瓶盖等操作。它可灵活配置多种传感器,提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…

企业微信自建应用开发回调事件实现方案

目录 1. 前言 2. 正文 2.1 技术方案 2.2 策略上下文 2.2 添加客户策略实现类 2.3 修改客户信息策略实现类 2.4 默认策略实现类 2.5 接收事件的实体类(可以根据事件格式的参数做修改) 2.6 实际接收回调结果的接口 近日在开发企业微信的自建应用时…

Linux将多个块设备挂载到一个挂载点

在 Linux 系统中,直接将多个块设备挂载到同一个挂载点是不可能的。这是因为 Linux 的文件系统挂载机制设计为一个挂载点一次只能关联一个文件系统。如果尝试将多个块设备挂载到同一个挂载点,后一次挂载会覆盖前一次的挂载,导致只有最后挂载的…

Spark-SQL(四)

本节课学习了spark连接hive数据,在 spark-shell 中,可以看到连接成功 将依赖放进pom.xml中 运行代码 创建文件夹 spark-warehouse 为了使在 node01:50070 中查看到数据库,需要添加如下代码,就可以看到新创建的数据库 spark-sql_1…

野外价值观:在真实世界的语言模型互动中发现并分析价值观

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

el-select+vue-virtual-scroller解决数据量大卡顿问题

解决el-select中数据量过大时,显示及搜索卡顿问题,及正确的回显默认选中数据 粗略的封装了组件,有需要各种属性自定义的,自己添加设置下 环境 node 16.20.1 npm 8.19.4 vue2、element-ui "vue-virtual-scroller"…

Sqlite3交叉编译全过程

Sqlite3交叉编译全过程 一、概述二、下载三、解压四、配置五、编译六、安装七、验证文件类型八、移植8.1、头文件sqlite3.h8.2、动态链接库移植8.3、静态态链接库移植 九、验证使用9.1. 关键函数说明 十、触发器使用十一、sqlite表清空且恢复id值十二、全文总结 一、概述 SQLi…

软考软件设计师考试情况与大纲概述

文章目录 **一、考试科目与形式****二、考试大纲与核心知识点****科目1:计算机与软件工程知识****科目2:软件设计** **三、备考建议****四、参考资料** 这是一个系列文章的开篇 本文对2025年软考软件设计师考试的大纲及核心内容进行了整理,并…

【数学建模】孤立森林算法:异常检测的高效利器

孤立森林算法:异常检测的高效利器 文章目录 孤立森林算法:异常检测的高效利器1 引言2 孤立森林算法原理2.1 核心思想2.2 算法流程步骤一:构建孤立树(iTree)步骤二:构建孤立森林(iForest)步骤三:计算异常分数 3 代码实现…

【Android面试八股文】Android系统架构【一】

Android系统架构图 1.1 安卓系统启动 1.设备加电后执行第一段代码:Bootloader 系统引导分三种模式:fastboot,recovery,normal: fastboot模式:用于工厂模式的刷机。在关机状态下,按返回开机 键进…

jvm-获取方法签名的方法

在Java中,获取方法签名的方法可以通过以下几种方式实现,具体取决于你的需求和使用场景。以下是详细的介绍: 1. 使用反射 API Java 提供了 java.lang.reflect.Method 类来获取方法的相关信息,包括方法签名。 示例代码&#xff1a…

DeepSeek和Excel结合生成动态图表

文章目录 一、前言二、3D柱状图案例2.1、pyecharts可视化官网2.2、Bar3d-Bar3d_puch_card2.3、Deepseek2.4、WPS2.5、动态调整数据 一、前言 最近在找一些比较炫酷的动态图表,用于日常汇报,于是找到了 DeepseekExcel王牌组合,其等同于动态图…

探索 .bat 文件:自动化任务的利器

在现代计算机操作中,批处理文件(.bat 文件)是一种简单而强大的工具,它可以帮助我们自动化重复性任务,工作效率提高。尽管随着编程语言和脚本工具的发展,.bat 文件的使用频率有所下降,但它依然是…

PyTorch与自然语言处理:从零构建基于LSTM的词性标注器

目录 1.词性标注任务简介 2.PyTorch张量:基础数据结构 2.1 张量创建方法 2.2 张量操作 3 基于LSTM的词性标注器实现 4.模型架构解析 5.训练过程详解 6.SGD优化器详解 6.1 SGD的优点 6.2 SGD的缺点 7.实用技巧 7.1 张量形状管理 7.2 广播机制 8.关键技…

【C++】特殊类的设计、单例模式以及Cpp类型转换

📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🌐 C 语言 上篇文章: C 智能指针使用,以及shared_ptr编写 下篇文章: C IO流 目录 特殊类的设…

探索 Flowable 后端表达式:简化流程自动化

什么是后端表达式? 在 Flowable 中,后端表达式是一种强大的工具,用于在流程、案例或决策表执行期间动态获取或设置变量。它还能实现自定义逻辑,或将复杂逻辑委托…… 后端表达式在 Flowable 的后端运行,无法访问前端…

【Lua】Lua 入门知识点总结

Lua 入门学习笔记 本教程旨在帮助有编程基础的学习者快速入门Lua编程语言。包括Lua中变量的声明与使用,包括全局变量和局部变量的区别,以及nil类型的概念、数值型、字符串和函数的基本操作,包括16进制表示、科学计数法、字符串连接、函数声明…

符号速率估计——小波变换法

[TOC]符号速率估计——小波变换法 一、原理 1.Haar小波变换 小波变换在信号处理领域被成为数学显微镜,不同于傅里叶变换,小波变换可以观测信号随时间变换的频谱特征,因此,常用于时频分析。   当小波变换前后位置处于同一个码元…

android contentProvider 踩坑日记

写此笔记原因 学习《第一行代码》到第8章节实现provider时踩了一些坑,因此记录下来给后来人和自己一个提示,仅此而已。 包含内容 Sqlite数据库CURD内容provider界面provider项目中书籍管理provider实现逻辑用adb shell确认providercontentResolver接收…

Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos 一.Eureka引入1.注册中心2.CAP理论3.常见的注册中心 二.Eureka介绍1.搭建Eureka Server 注册中心2.搭建服务注册3.服务发现 三.负载均衡LoadBalance1.问题引入2.服务端负载均衡3.客户端负载均衡4.Spring Cloud LoadBalancer1).快速上手2)负载均衡策…