2026/2/20 12:00:49
网站建设
项目流程
德州专业网站开发公司,wordpress 文中文档,wordpress标签并集显示,个人养老金制度出台有望年底前言
这一节的内容可能有点多#xff0c;大家可以选择性的来看
简介
Java的三大特性#xff1a;封装、继承、多态
乍一听#xff0c;好像很高大上#xff0c;其实当你真正用的时候#xff0c;会发现高大上的还在后面呢。。。
热身
在正式讲解三大特性之前#xff0…前言这一节的内容可能有点多大家可以选择性的来看简介Java的三大特性封装、继承、多态乍一听好像很高大上其实当你真正用的时候会发现高大上的还在后面呢。。。热身在正式讲解三大特性之前先普及几个知识1. 访问权限修饰符Java中关于访问权限的四个修饰符表格如下privatefriendly默认protectedpublic当前类访问权限√√√√包访问权限×√√√子类访问权限××√√其他类访问权限×××√其中比较尴尬的是protected修饰符有点卡在中间不上不下的感觉因为它不适合用来修饰属性假设用它修饰属性那么任何一个人都可以通过继承这个类来直接访问到这个类的属性从而破坏封装性2. 抽象类abstract什么是抽象类抽象类就是用abstract修饰且不能被直接初始化的类但是可以通过子类来初始化比如Father father new Son()对应的抽象方法就是用abstract修饰的方法抽象方法是一种很特殊的方法它没有方法体即方法实现代码为空比如abstract public void fun();抽象方法一般在子类中进行实现它就好像是在说我不写代码我只是声明一个方法名剩下的交给我的子孙后代继承类去做抽象类有一个很重要的特点抽象类可以没有抽象方法但是如果一个类有抽象方法那么这个类肯定是抽象类为什么会有抽象类解耦使代码结构更加清晰因为抽象类不能被直接创建为对象它只是作为一个通用接口来供别人实现和调用所以这样就使得抽象的代码更加清晰它只声明方法不实现方法就好比老板和员工老板负责分发任务员工负责去具体的实现任务好了关于抽象类先介绍到这里更详细的后面的章节再深入3. 重载(overloading)和覆写(overwriting)重载和覆写是两个很容易混淆的概念重载同一个类中一个方法的多种表现形式参数类型不同参数个数不同覆写继承设计中子类覆盖父类的方法也可以叫做重写不过这样跟重载有点混淆所以个人喜欢叫做覆写他们之间的区别如下重载覆写访问权限可以不同可以不同但是子类的可见性不能比父类的低方法返回值可以不同相同参数类型不同充分条件相同参数个数不同充分条件相同这里要注意几点覆写时子类的方法访问权限不能低于父类比如父类方法为public那么子类也只能为public重载时访问权限和方法返回值不能作为用来判断一个方法是否为重载的依据只能说重载允许不同的访问权限和返回值覆写示范代码示范如下// 覆写一正确示范 Override public void fun(){ System.out.println(son fun); } // 覆写二错误示范访问权限低了 Override private void fun(){ // 报错fun() in SonDemo clashes with fun() in Father; attempting to assign weaker access privileges (private); was public System.out.println(son fun); }Override这个是干嘛的之前没见过啊这个修饰符用来说明这个方法是覆写方法不写也可以系统会自己识别方法是不是覆写的那为啥还要多此一举呢用系统默认的识别机制不好吗要多此一举不好因为加了注解代码可读性更高代码更加规范别人看了代码后立马就知道这个方法是覆写方法重载示范重载用图展示可能会更加清晰图示解释参数类型和参数个数只要满足其一就可以说这个方法被重载了访问权限和方法返回值用虚线框是为了说明他们两个只是重载的一个附加表现形式可有可无不能作为重载的判断依据下面用代码演示下// 基础方法 public void fun1(int a){ } // 重载一参数个数不同 public void fun1(){ } // 重载二参数类型不同 public void fun1(float a){ } // 重载三错误示范仅仅用访问权限的不同来重载 private void fun1(int a){ // 编译报错fun1(int) is already defined } // 重载四错误示范仅仅用返回值的不同来重载 public int fun1(int a){ // 编译报错fun1(int) is already defined return 0; }下面进入正文开始顺序介绍这三大特性正文1. 封装Encapsulation就是把类的属性私有化(private修饰再通过公有方法(public)进行访问和修改为什么要封装呢追踪变化可以在set方法中编写代码来追踪属性的改变记录public void setName(String name) { System.out.println(名字即将被修改); System.out.println(旧名字 this.name); System.out.println(新名字 name); this.name name; }修改底层实现在修改属性名时不会影响外部接口对属性的访问比如name属性改为firstName和lastNamename就可以在get方法中修改返回值为firstNamelastName对外接口没变化// 修改前 private String name; public String getName() { return name; } // 修改后 private String firstName; private String lastName; // 方法名不用变只是方法内容作了修改 public String getName() { return firstName lastName; }校验数据可以在set方法中校验传来的数据是否符合属性值的设定范围防止无效数据的乱入public void setAge(int age) throws Exception { if(age1000 || age0){ throw new Exception(年龄不符合规范0~1000); } this.age age; }2. 继承(Inheritance)如果子类继承了父类那么子类就可以复用父类的方法和属性并且可以在此基础上新增方法和属性这里要注意的一点是Java是单继承语言即每个类只能有一个父类这里还要普及一个常识如果一个类没有指定父类即没有继承任何类那么这个类默认继承Object类为什么要用继承呢为了代码复用减少重复工作单继承不会太局限吗为啥不用多继承因为多继承会导致致命方块问题因为像扑克牌的方块符号比如A同时继承B和C然后B和C各自继承DB和C各自覆写了D的fun方法那这时A该调用哪个类的fun方法呢下面用图来说话那为什么叫致命方块而不是致命三角形呢那个D类好像是多余的不多余这个D类其实就是上面讲到的抽象类的作用将共有的部分fun()抽象出来或者提供一个基础的实现然后子类分别去实现各自的这也是多态的一种体现下面会将多态如果没有D类那么B和C的fun()就会存在重复代码这时你可能就想要搞一个父类出来了这个父类就是D类那要怎么判断继承类设计得好不好呢通过is-a关系来判断is-a关系指的是一个是另一个的关系男人是人说得通人是男人一半说得通用is-a关系可以很好地体现你的继承类设计的好还是坏如果子类都可以说是一个父类那么这个继承关系设计的就很好男人是人is-a关系如果子类和父类只是包含或者引用的关系那么这个继承关系就很糟糕猫是猫笼包含关系有没有什么办法可以阻止类的继承就像private修饰符用来封装属性其他人访问不到一样有啊final修饰符可以阻止类的继承这里重点讲一下final修饰符final可以用来修饰属性、方法、类表示他们是常量不可被修改的final修饰属性属性是常量必须在定义时初始化或者构造函数中初始化final修饰方法方法不能被覆写final修饰类类不能被继承说到final有必要提一下内联内联指的是如果一个方法内容很短且没有被其他类覆写时方法名会被直接替换为方法内容比如final getName()这个方法可以内联为name属性再比如getSum(){return ab},会直接被内联为ab为什么会有内联这个东西呢因为这样可以提高效率细节CPU在处理方法调用的指令时使用的分支转移会扰乱预取指令的策略这个比较底层这里先简单介绍后面章节再深入那它有没有什么缺点呢有如果一个方法内容过长又误被当做内联处理那么就会影响性能比如你的代码多个地方都调用这个方法那么你的代码就会膨胀变得很大从而影响性能那有没有办法可以解决呢有虚拟机的即时编译技术即时编译会进行判断如果一个方法内容很长且被多次调用那么它会自动关闭内联机制防止代码膨胀3. 多态(Polymorphism)字面理解就是多种形态在Java中多态指的是一个类可以有多种表现形态多态主要是 用来创建可扩展的程序像我们上面提到的继承就是属于多态的一种还有一种就是接口interface接口类一种是比抽象类更加抽象的类因为抽象类起码还可以实现方法但是接口类没得选就只能定义方法不能实现不过从Java8开始接口支持定义默认方法和静态方法接口的默认方法default修饰符和静态方法static修饰符)会包含方法内容这样别人可以直接调用接口类的方法后面章节再细讲这样你会发现接口变得很像抽象类了不过接口支持多实现即一个类可以同时实现多个类但是一个类同时只能继承一个类这样一来Java相当于间接地实现了多继承下图说明继承和实现的区别单继承多实现多态一般用在哪些场景呢场景很多这里说两个最常用的场景一方法的参数即方法定义时父类作为方法的形参然后调用时传入子类作为方法的实参场景二方法的返回值即方法定义时父类作为方法的返回值然后在方法内部实际返回子类代码示范如下public class PolyphorismDemo { public static void main(String[] args) { PolyphorismDemo demo new PolyphorismDemo(); //场景一形参将猫子类赋值给动物父类 demo.fun(new Cat()); //场景二返回值将猫赋值给动物 Animal animal demo.fun2(); } public void fun(Animal animal){ } public Animal fun2(){ return new Cat(); } } class Animal{ } class Cat extends Animal{ }总结其中还有很多知识点没总结太多了看起来会不方便所以其他的内容会陆续放到后面章节来讲这里先简单列出来比如equals和hashcode的关系instanceof和getClass()的区别静态绑定和动态绑定Java8的默认方法和静态方法等等等后记Java开发的就业市场正在经历结构性调整竞争日益激烈传统纯业务开发岗位如仅完成增删改查业务的后端工程师的需求特别是入门级岗位正显著萎缩。随着企业技术需求升级市场对Java人才的要求已从通用技能转向了更深入的领域经验如云原生、微服务或前沿的AI集成能力。这也导致岗位竞争加剧在一、二线城市求职者不仅面临技术内卷还需应对学历与项目经验的高门槛。大模型为核心的AI领域正展现出前所未有的就业热度与人才红利2025年AI相关新发岗位数量同比激增543%单月增幅最高超过11倍大模型算法工程师位居热门岗位前列。行业顶尖人才的供需严重失衡议价能力极强跳槽薪资涨幅可达30%-50%。值得注意的是市场并非单纯青睐算法研究员而是急需能将大模型能力落地于复杂业务系统的工程人才。这使得具备企业级架构思维和复杂系统整合经验的Java工程师在向“Java大模型”复合人才转型时拥有独特优势成为企业竞相争夺的对象其薪资天花板也远高于传统Java岗位。说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇如何学习AGI大模型作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享**一、2025最新大模型学习路线一个明确的学习路线可以帮助新人了解从哪里开始按照什么顺序学习以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛没有明确的学习路线可能会导致新人感到迷茫不知道应该专注于哪些内容。我们把学习路线分成L1到L4四个阶段一步步带你从入门到进阶从理论到实战。L1级别:AI大模型时代的华丽登场L1阶段我们会去了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理关键技术以及大模型应用场景通过理论原理结合多个项目实战从提示工程基础到提示工程进阶掌握Prompt提示工程。L2级别AI大模型RAG应用开发工程L2阶段是我们的AI大模型RAG应用开发工程我们会去学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3级别大模型Agent应用架构进阶实践L3阶段大模型Agent应用架构进阶实现我们会去学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造我们自己的Agent智能体同时还可以学习到包括Coze、Dify在内的可视化工具的使用。L4级别大模型微调与私有化部署L4阶段大模型的微调和私有化部署我们会更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握而L3 L4更多的是通过项目实战来掌握大模型的应用开发针对以上大模型的学习路线我们也整理了对应的学习视频教程和配套的学习资料。二、大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF三、大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。四、大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。五、大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享