Java 面向对象|大二学习笔记,把最难啃的这块讲明白
之前把 Java 基础语法过完了if、for、数组、方法写起来还算顺手可一碰到面向对象直接卡壳。很长一段时间我都觉得不就是写个 class 然后 new 对象吗好像看懂了但一写代码就乱分不清什么时候用继承、什么时候封装多态更是越看越懵。后来慢慢敲 demo、踩坑才发现面向对象不是一堆语法是一种思考方式。Java 本身就是面向对象语言后面学集合、框架全是这套东西。如果这里糊里糊涂后面基本寸步难行。这篇就按我自己理解的思路整理没有生硬的课本定义。先搞懂最根本的类和对象一句话类是模板对象是模板造出来的实例。 举个最简单的例子。我们说 “学生”这是一个类别是抽象的里面有学号、姓名、年龄这些属性还有上课、写作业这些行为这就是类。 而你、我、班里其他同学一个个具体的人就是对象。写代码里就是属性 → 成员变量行为 → 成员方法class Student { String name; int age; void study() { System.out.println(name 在学习); } }new 就是根据这个模板造一个实实在在的对象Student s1 new Student(); s1.name 小张; s1.study();刚学的时候很容易犯一个错把类当成对象。记住类只是图纸图纸不能直接用new 出来的才是能操作的东西。封装把东西藏起来可控地访问封装是三大特性第一个也是我们最先要养成的习惯。最开始写代码成员变量直接写 public外面随便改public int age;这样很省事但问题很大。别人写代码的时候可以直接给 age 赋值 - 20逻辑直接坏掉类里面的数据不受控制。封装思路很简单成员变量用private藏起来外面不能直接访问提供 get、set 方法想要读或者修改只能走这两个方法在 set 里面加判断过滤非法数据private int age; public void setAge(int age) { if (age 0 age 120) { this.age age; } else { System.out.println(年龄不合法); } } public int getAge() { return age; }这里顺带说this。this代表当前这个对象。方法里局部变量和成员变量重名的时候靠 this 区分。很多人觉得封装就是写 get/set很麻烦。我之前也这么想。后来写稍微复杂一点的代码才明白封装的本质是保护内部数据把细节隐藏只暴露安全的入口。构造方法new 对象的时候自动调用构造方法属于类里很特殊的方法。 特点名字和类名一模一样没有返回值连 void 都不能写。 作用创建对象的时候给成员变量初始化。如果我们自己不写构造方法编译器偷偷给我们加一个无参构造。一旦你手写了有参构造默认的无参构造就消失了想用就得自己补上这个坑我踩过无数次。public Student(String name, int age) { this.name name; this.age age; }以后 new 的时候就可以直接传值Student s new Student(小李, 20);继承减少重复代码但别乱用继承就是子类去拿父类的东西关键字extends。 比如父类 Person有 name、age、吃饭的方法Student 属于 Person就可以继承它不用再重复写一遍 name、age。class Student extends Person { }Java 继承有一个硬性规则只支持单继承一个子类只能直接继承一个父类不能像别的语言一样同时继承好几个。两个关键字super代表父类对象。子类想调用父类的构造方法、成员方法、成员变量就用 super。而且 super () 放在构造方法第一行。方法重写Override子类写一个和父类方法名、参数、返回值完全一样的方法就把父类的逻辑覆盖掉。重写不是随便写权限不能比父类更严格。这里有一个很重要的提醒继承是is-a的关系。 学生是一个人 → 可以继承 Person。 笔记本是一个学生这就不对不能乱继承。不要为了少写两行代码就强行继承后面代码会很难维护。多态面向对象里最难理解的一块多态一句话总结同一个行为不同对象有不同实现。 写法就是父类引用指向子类对象Person p new Student();记住这句口诀编译看左边运行看右边。 编译的时候编译器拿左边父类的规则检查程序跑起来执行的是子类重写后的方法。但是它有局限父类引用不能直接调用子类独有的方法。如果非要调用得强制类型转换转错了会抛异常 ClassCastException。很多人疑惑多态到底有啥用 我之前也觉得写着费劲直到后面写统一的方法接收父类类型传进去任何子类对象都能跑。代码扩展性会好很多新增子类的时候不用大面积改动旧代码。举个通俗例子父类是动物有 shout 方法子类猫、狗分别重写 shout。写一个让动物叫的方法接收 Animal不管传猫还是狗都会发出自己对应的叫声这就是多态带来的便利。权限修饰符简单捋清楚表格修饰符本类同包子类其他包private✅❌❌❌默认不写✅✅❌❌protected✅✅✅❌public✅✅✅✅不用死背写多了自然熟。开发里最常用成员变量 private方法一般 public。static 和 final容易和面向对象混在一起static属于类不属于某个对象。静态成员直接用类名调用不用 new。静态方法里面不能直接访问非静态成员因为静态加载更早。final修饰变量就是常量修饰方法不能被重写修饰类不能被继承。最后聊聊我学这块的真实感受刚接触面向对象的时候总忍不住用之前写 C 语言那种 “面向过程” 的思路先干什么再干什么一步步往下写。 面向对象是反过来的先思考这里有哪些事物事物有什么属性、行为事物之间是什么关系再去写代码。这个思维转换比记语法难很多。不用逼自己一次性吃透。看不懂多态就写几个小 demo父类子类来回试打印日志看调用的是谁的方法分不清继承什么时候用就停下来想一想是不是 is-a 关系。还有一个忠告别上来就写很复杂的类也别一口气把封装继承多态堆在同一个项目里。先写简单的学生、动物 demo把每一个特性单独跑通再组合起来。面向对象是 Java 的灵魂后面学集合、接口、抽象类、框架全都是在这个基础上延伸。这里慢一点没关系理解透了后面的学习会顺畅不少。

相关新闻

Bowser 2.x 版本演进全解析:从 API 重写到 Client Hints 时代的浏览器检测器

Bowser 2.x 版本演进全解析:从 API 重写到 Client Hints 时代的浏览器检测器

开发工具 【免费下载链接】bowser a browser detector 项目地址: https://gitcode.com/gh_mirrors/bo/bowser 点击查看 免费下载 导读:本文以 Bowser(当前仓库为 gh_mirrors/bo/bowser,一个轻量级浏览器/平台/引擎检测库&#xf…

2026/10/15 2:18:18 阅读更多 →
FDFullscreenPopGesture 源码级解析:用 AOP 为 UINavigationController 开启全屏滑动返回

FDFullscreenPopGesture 源码级解析:用 AOP 为 UINavigationController 开启全屏滑动返回

移动开发UI组件 【免费下载链接】FDFullscreenPopGesture A UINavigationControllers category to enable fullscreen pop gesture with iOS7 system style. 项目地址: https://gitcode.com/gh_mirrors/fd/FDFullscreenPopGesture 点击查看 免费下载 FDFullscreenP…

2026/10/15 2:18:18 阅读更多 →
为什么视频AI这么贵?一份关于“省钱“技术的全景调查

为什么视频AI这么贵?一份关于“省钱“技术的全景调查

你有没有想过,为什么手机上的视频AI助手总是卡顿,或者干脆不支持太长的视频?答案很简单,也很扎心:视频太贵了。不是钱包意义上的贵,是计算意义上的贵。一段一分钟的视频,按每秒抽一帧算,也有60张图。每张图…

2026/10/15 2:18:18 阅读更多 →

最新新闻

ESXi 升级到 8.0 后 VM 快照删不掉?一篇讲透 “in progress“ 死循环的 3 种解法

ESXi 升级到 8.0 后 VM 快照删不掉?一篇讲透 “in progress“ 死循环的 3 种解法

本文适用版本:ESXi 7.0 U3 → 8.0 U2 升级场景(vSphere 6.7 升级也会遇到) 阅读时长:约 8 分钟 难度:⭐⭐⭐(操作不可逆,生产 VM 强烈建议先备份再动)一、为什么写这篇文章?最近私信里又有几位网友问:ESXi 7.0 升到 8.0 之后,VM 的快照怎么都删不掉,vSphere Client 里一直显示…

2026/10/15 2:48:27 阅读更多 →
ESXi ping 得通但连不上 vCenter?一篇讲透 hostd 假死的全套救法

ESXi ping 得通但连不上 vCenter?一篇讲透 hostd 假死的全套救法

本文适用版本:ESXi 7.0 U3 / 8.0 U2 / 9.0 GA 阅读时长:约 7 分钟 难度:⭐⭐(SSH 能进就能修,但要分清是 hostd 还是 vpxd 的锅)一、为什么写这篇文章?最近私信里又陆续收到几位网友问:ESXi 能 ping 通、SSH 也能进、DCUI 也正常,但 vCenter 里主机显示"未响应"或&q…

2026/10/15 2:48:27 阅读更多 →
前端XSS防御实战:xss-filters上下文转义库详解

前端XSS防御实战:xss-filters上下文转义库详解

简介:前端开源库-xss-filters是一份面向前端开发者与安全入门者的XSS防护工具源码包,聚焦于解决用户输入回显场景下的跨站脚本注入风险。资源共30个文件,以20个js源码与测试脚本为主体,辅以3个json配置、3个md说明文档&#xff0c…

2026/10/15 2:48:27 阅读更多 →
ESXi 装系统报错 “bootbank is corrupted“ 怎么办?一篇讲透三种根治方案

ESXi 装系统报错 “bootbank is corrupted“ 怎么办?一篇讲透三种根治方案

本文适用版本:ESXi 7.0 U3 / 8.0 U2 / 9.0 GA(三版统一报错,解决方案略有差异) 阅读时长:约 8 分钟 难度:⭐⭐⭐(需在 DCUI/物理机前操作,不建议生产机远程盲操作)一、为什么写这篇文章? 最近陆续有几位网友私信问同一个问题:装 ESXi 的时候跑到一半,屏幕突然卡住,报 bootbank…

2026/10/15 2:48:27 阅读更多 →
React Native position 定位详解:relative 与 absolute 实战指南

React Native position 定位详解:relative 与 absolute 实战指南

1. 为什么 position 定位值得单独拎出来讲做 React Native 开发的人,迟早都会在布局上栽跟头。Flexbox 那一套东西,flexDirection、justifyContent、alignItems三板斧抡完,大部分界面确实能搭出来。但总有一些场景,光靠 Flex 流式…

2026/10/15 2:48:27 阅读更多 →
从零开发聚合9大视频网站的桌面App:技术选型与发布运营复盘

从零开发聚合9大视频网站的桌面App:技术选型与发布运营复盘

前阵子我在一个技术交流群里发了句感叹:“现在做桌面应用,是不是有点逆潮流?”结果有个朋友直接回我:“你做一个有用的桌面工具试试,用户在乎的是好不好用,又不是你用什么平台。”我当时不以为然&#xff0…

2026/10/15 2:47:27 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →