Java中的三大特性 - 超详细篇_java类的三特性探讨,零基础入门到精通,收藏这篇就够了

前言

这一节的内容可能有点多,大家可以选择性的来看

简介

Java的三大特性:封装、继承、多态

乍一听,好像很高大上,其实当你真正用的时候,会发现高大上的还在后面呢。。。

热身

在正式讲解三大特性之前,先普及几个知识

1. 访问权限修饰符

Java中关于访问权限的四个修饰符,表格如下

privatefriendly(默认)protectedpublic
当前类访问权限
包访问权限×
子类访问权限××
其他类访问权限×××

其中比较尴尬的是protected修饰符,有点卡在中间,不上不下的感觉

因为它不适合用来修饰属性

假设用它修饰属性,那么任何一个人都可以通过继承这个类,来直接访问到这个类的属性,从而破坏"封装性"

2. 抽象类(abstract)

什么是抽象类?

抽象类就是用abstract修饰,且不能被直接初始化的类,但是可以通过子类来初始化
比如:Father father = new Son()

对应的,抽象方法就是用abstract修饰的方法

抽象方法是一种很特殊的方法,它没有方法体,即方法实现代码为空,比如abstract public void fun();

抽象方法一般在子类中进行实现,它就好像是在说:我不写代码,我只是声明一个方法名,剩下的交给我的子孙后代(继承类)去做

抽象类有一个很重要的特点:抽象类可以没有抽象方法,但是如果一个类有抽象方法,那么这个类肯定是抽象类

为什么会有抽象类

解耦,使代码结构更加清晰

因为抽象类不能被直接创建为对象,它只是作为一个通用接口来供别人实现和调用,所以这样就使得抽象的代码更加清晰(它只声明方法,不实现方法)
就好比,老板和员工,老板负责分发任务,员工负责去具体的实现任务

好了,关于抽象类,先介绍到这里,更详细的后面的章节再深入

3. 重载(overloading)和覆写(overwriting)

重载和覆写是两个很容易混淆的概念

重载:同一个类中,一个方法的多种表现形式(参数类型不同,参数个数不同)

覆写:继承设计中,子类覆盖父类的方法(也可以叫做重写,不过这样跟重载有点混淆,所以个人喜欢叫做覆写)

他们之间的区别如下

重载覆写
访问权限可以不同可以不同(但是子类的可见性不能比父类的低)
方法返回值可以不同相同
参数类型不同(充分条件)相同
参数个数不同(充分条件)相同

这里要注意几点

  1. 覆写时,子类的方法访问权限不能低于父类,比如父类方法为public,那么子类也只能为public
  2. 重载时,访问权限和方法返回值,不能作为用来判断一个方法是否为重载的依据;只能说重载允许不同的访问权限和返回值
覆写示范

代码示范如下,

// 覆写一:正确示范 @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这个是干嘛的?之前没见过啊

这个修饰符用来说明这个方法是覆写方法,不写也可以,系统会自己识别方法是不是覆写的

那为啥还要多此一举呢?用系统默认的识别机制不好吗?

要多此一举;不好;

因为加了注解,代码可读性更高,代码更加规范,别人看了代码后,立马就知道这个方法是覆写方法

重载示范

重载用图展示可能会更加清晰

图示解释:

  1. 参数类型和参数个数,只要满足其一,就可以说这个方法被重载了

  2. 访问权限和方法返回值用虚线框,是为了说明他们两个只是重载的一个附加表现形式(可有可无),不能作为重载的判断依据

下面用代码演示下

// 基础方法 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)进行访问和修改

为什么要封装呢?

  1. 追踪变化:可以在set方法中,编写代码来追踪属性的改变记录

    public void setName(String name) { System.out.println("名字即将被修改"); System.out.println("旧名字:" + this.name); System.out.println("新名字:" + name); this.name = name; }
  2. 修改底层实现:在修改属性名时,不会影响外部接口对属性的访问

    比如:name属性改为firstName和lastName,name就可以在get方法中修改返回值为firstName+lastName,对外接口没变化

    // 修改前 private String name; public String getName() { return name; } // 修改后 private String firstName; private String lastName; // 方法名不用变,只是方法内容作了修改 public String getName() { return firstName + lastName; }

  3. 校验数据:可以在set方法中,校验传来的数据是否符合属性值的设定范围,防止无效数据的乱入

    public void setAge(int age) throws Exception { if(age>1000 || age<0){ throw new Exception("年龄不符合规范,0~1000"); } this.age = age; }
2. 继承(Inheritance)

如果子类继承了父类,那么子类就可以复用父类的方法和属性,并且可以在此基础上新增方法和属性

这里要注意的一点是:Java是单继承语言,即每个类只能有一个父类

这里还要普及一个常识:如果一个类没有指定父类(即没有继承任何类),那么这个类默认继承Object类

为什么要用继承呢?

为了代码复用,减少重复工作

单继承不会太局限吗?为啥不用多继承?

因为多继承会导致"致命方块"问题(因为像扑克牌的方块符号)

下面用图来说话

那为什么叫致命方块,而不是致命三角形呢?那个D类好像是多余的

不多余

这个D类其实就是上面讲到的抽象类的作用:将共有的部分fun()抽象出来(或者提供一个基础的实现),然后子类分别去实现各自的,这也是多态的一种体现(下面会将多态)

如果没有D类,那么B和C的fun()就会存在重复代码,这时你可能就想要搞一个父类出来了,这个父类就是D类

那要怎么判断继承类设计得好不好呢?

通过is-a关系来判断

is-a关系指的是一个是另一个的关系,男人是人(说得通),人是男人(一半说得通)

用is-a关系可以很好地体现你的继承类设计的好还是坏

有没有什么办法可以阻止类的继承?就像private修饰符用来封装属性,其他人访问不到一样

有啊,final修饰符可以阻止类的继承

这里重点讲一下final修饰符

final可以用来修饰属性、方法、类,表示他们是常量,不可被修改的

final修饰属性:属性是常量,必须在定义时初始化,或者构造函数中初始化

final修饰方法:方法不能被覆写

final修饰类:类不能被继承

说到final,有必要提一下内联

内联指的是,如果一个方法内容很短,且没有被其他类覆写时,方法名会被直接替换为方法内容

比如:final getName()这个方法可以内联为name属性

再比如:getSum(){return a+b},会直接被内联为a+b

为什么会有内联这个东西呢?

因为这样可以提高效率(细节: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{ }

总结

其中还有很多知识点没总结,太多了,看起来会不方便,所以其他的内容会陆续放到后面章节来讲

这里先简单列出来,比如:

后记

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大模型学习资源包》免费分享

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

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

相关文章

Thinkphp-Laravel基于协同过滤算法的图书借阅推荐系统vue功能多

目录系统架构设计协同过滤算法实现核心功能模块性能优化策略扩展功能集成项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理系统架构设计 Thinkphp-Laravel框架作为后端基础&#xff0c;采用MVC模式实现业务逻辑与数据分离。Vue.js构建动态前端界面…

rs485和rs232区别总结详解:图文并茂易懂版

RS-485 和 RS-232 到底怎么选&#xff1f;一文讲透工业通信的底层逻辑 在调试一块老式PLC时&#xff0c;你有没有遇到过这样的问题&#xff1a;明明程序烧录正确、线也接好了&#xff0c;但就是收不到传感器的数据&#xff1f;换一根线试试——好了&#xff1b;再远一点装设备—…

快速理解WinDbg Preview的Local Kernel Debugging

一台电脑搞定内核调试&#xff1a;WinDbg Preview 的 Local Kernel Debugging 实战指南你有没有遇到过这样的场景&#xff1f;系统突然蓝屏&#xff0c;错误代码一闪而过&#xff1b;驱动在特定操作下无响应&#xff0c;却没有任何日志输出&#xff1b;内存使用一路飙升&#x…

爆肝整理!AI Agent记忆系统全指南:一篇搞定记忆三大核心问题,建议收藏!

本文深入解析AI Agent记忆系统&#xff0c;揭示其解决大模型"金鱼脑"问题的关键。系统包含三大核心问题&#xff1a;记忆形成、进化与检索&#xff1b;三种形态&#xff1a;Token级、参数化与潜变量记忆&#xff1b;三大功能&#xff1a;事实记忆、经验记忆与工作记忆…

Thinkphp-Laravel基于协同过滤算法的药品商城推荐系统vue_b46n1

目录系统概述技术架构协同过滤算法实现功能模块创新点与优化应用价值项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理系统概述 Thinkphp-Laravel药品商城推荐系统&#xff08;vue_b46n1&#xff09;是一个基于前后端分离架构的电子商务平台&#…

Proteus 8 Professional下载赋能在线远程教学解决方案探讨

打破实验室围墙&#xff1a;用Proteus 8 Professional构建可落地的远程电子教学新范式你有没有遇到过这样的困境&#xff1f;讲完单片机中断原理&#xff0c;学生一脸茫然&#xff1b;布置一个“点亮LED按键控制”的实验任务&#xff0c;结果一半人反馈“没开发板”、“家里没有…

强烈安利专科生必看!9个AI论文网站TOP9测评

强烈安利专科生必看&#xff01;9个AI论文网站TOP9测评 为什么需要这份AI论文工具测评&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的平台&#xff0c;如何选择真正适合自己需求的…

通俗解释ES6语法中的类与继承机制

搞懂 ES6 的class和继承&#xff1a;从写代码的“土办法”到优雅编程你有没有过这样的经历&#xff1f;在早期写 JavaScript 时&#xff0c;想做个“人”这个对象&#xff0c;结果只能靠函数模拟&#xff1a;function Person(name, age) {this.name name;this.age age; } Per…

有关HDFS的三种客户端操作方式详解 (命令行,网页界面,Java API一步到位)_hdfs客户端,收藏这篇就够了

前言 Hadoop分布式文件系统(HDFS)提供了多种客户端操作方式&#xff0c;本文将详细介绍三种主流操作方法&#xff1a;命令行操作、Web界面操作和Java API编程。通过在VMware Workstation Pro虚拟环境中使用CentOS 8系统&#xff0c;结合MobaXterm终端工具&#xff0c;我将逐一…

Thinkphp-Laravel基于微信小程序一对一教学班级作业小助手的设计与实现_7nl0d

目录摘要内容项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要内容 针对微信小程序环境下的一对一教学班级作业管理需求&#xff0c;设计并实现了一款基于ThinkPHP和Laravel框架的作业小助手系统。该系统整合了教师端与学生端功能&#xff0c;…

手把手教你绘制RS485接口详细接线图(含MAX485)

从零开始画懂RS485接线&#xff1a;MAX485实战全解析你有没有遇到过这样的情况&#xff1f;系统明明在实验室通得好好的&#xff0c;一拉到现场300米外的设备上就丢包、乱码&#xff0c;甚至通信完全中断。排查半天发现——不是程序写错了&#xff0c;而是RS485接线图没画对。别…

I2C协议总线电容影响分析:长线传输性能下降原因

为什么你的I2C总线一拉长就通信失败&#xff1f;揭秘总线电容的“隐形杀手”效应你有没有遇到过这种情况&#xff1a;在开发板上测试得好好的I2C通信&#xff0c;传感器读数稳定、响应迅速&#xff1b;可一旦把线拉长几米&#xff0c;接上几个设备&#xff0c;就开始丢数据、报…

WinDbg加载符号文件完整指南:精准定位驱动问题

WinDbg符号加载实战指南&#xff1a;像内核工程师一样精准定位驱动崩溃 你有没有遇到过这样的场景&#xff1f;系统突然蓝屏&#xff0c;你兴冲冲打开WinDbg分析转储文件&#xff0c;结果堆栈里全是裸地址&#xff1a; fffff80003c5a120 fffff8011a2b3c4d连函数名都看不到&a…

IPD咨询洞察:别再让客户试用“踩坑”!IPD模式下的客户试用管理全流程实战指南

在IPD体系中&#xff0c;客户试用绝非简单的“产品给客户用用看”&#xff0c;而是产品大规模上市前至关重要的一次“大考”。它系统性地验证产品与市场的匹配度&#xff0c;是规避风险、优化产品、确保发布成功的核心环节。本文将为您详解客户试用的全流程管理&#xff0c;揭示…

【苍狮技术团队】2026 开年调研:大家都在用大模型做什么?大模型项目真的跑起来了?

2025 年&#xff0c;我们见证了大模型从「技术狂欢」逐渐走向「真实落地」。 这一年里&#xff0c;我们在公众号持续分享了&#xff1a; ✅ Dify 私有化部署与二次开发✅ RAGFlow 知识库构建与检索优化✅ 企业内部知识问答、流程自动化、智能助手实践✅ 模型选型、性能调优、…

全面讲解常见智能设备:门锁、灯光、传感器入门

智能家居入门&#xff1a;从门锁、灯光到传感器的实战解析你有没有过这样的经历&#xff1f;深夜回家&#xff0c;手忙脚乱掏钥匙开门&#xff0c;结果发现灯还关着——只能摸黑进屋。或者出门后突然怀疑&#xff1a;“我到底锁门了没有&#xff1f;”这些日常小烦恼&#xff0…

Android Studio 性能分析工具:优化移动应用性能

Android Studio 性能分析工具&#xff1a;优化移动应用性能关键词&#xff1a;Android Studio、性能分析工具、移动应用性能、优化、性能监测摘要&#xff1a;本文主要围绕 Android Studio 中的性能分析工具展开&#xff0c;详细介绍了这些工具的核心概念、工作原理、使用方法以…

零基础也能懂的机器学习核心概念解读

一、核心概念解读 1. 机器学习&#xff08;ML&#xff09; 专业定义&#xff1a;一门让计算机无需被明确编程就能从数据中学习并改进的学科&#xff0c;其核心是构建能从经验&#xff08;数据&#xff09;中自动提炼规律、并用于预测或决策的系统。 通俗解读&#xff1a;就像教…

网安校招党集合!3 类入门岗位薪资 + 技能对标,你们更倾向渗透测试还是安全运营?

网络安全校招&#xff1a;3 类入门岗位薪资 技能要求&#xff0c;清晰对标 2025 年网络安全人才缺口已突破 150 万&#xff0c;北京、深圳等城市企业甚至开出 “应届生年薪 30 万 ” 的高薪抢人。但对高校应届生而言&#xff0c;“岗位类型繁杂、技能要求模糊” 往往成为求职路…

电感在电源储能环节的作用深度剖析

电感如何在电源中“搬能量”&#xff1f;一文讲透它的核心角色你有没有想过&#xff0c;一个小小的电感&#xff0c;凭什么能在开关电源里稳坐C位&#xff1f;它不像MOSFET那样“掌权”通断&#xff0c;也不像控制IC那样“发号施令”&#xff0c;但它却是整个能量转换链条中最沉…