当前位置: 首页 > news >正文

第7篇:Java面向对象简介

第7篇:Java面向对象简介

一、核心知识点

  • 面向对象(OOP)的核心思想:对象、类、继承、封装、多态
  • 类与对象的关系(蓝图与实例)
  • 封装的意义:隐藏实现细节,暴露公共方法
  • 继承:代码复用,extends关键字
  • 多态:父类引用指向子类对象,方法重写
  • 面向过程(POP)与面向对象(OOP)的对比

二、通俗讲解(1分钟开心学)

1. 面向过程 vs 面向对象

  • 面向过程:以“函数”为核心,数据和方法分开。就像一份菜谱:先洗菜,再切菜,再炒菜。优点是简单直接,缺点是代码难扩展。
  • 面向对象:以“对象”为核心,把数据和操作打包在一起。就像你有一个“厨师”对象,他有菜刀、锅、食材属性,也有“做菜”方法。你只管跟厨师说“做菜”,不用管内部细节。

生活类比
面向过程就像去修理店,你跟老板说:“先拿螺丝刀,拆后盖,换电池,装后盖。”(每一步都要你指挥)
面向对象就像你直接把手机给维修机器人,说:“帮我换电池。”机器人自己会拿工具、拆机、更换。你只关心结果,不关心过程。

2. 四大特征

  • 封装:把数据(属性)和行为(方法)包在一起,对外隐藏内部细节。比如汽车的油门踏板,你踩它就加速,但你不需要知道发动机怎么喷油。
  • 继承:子类继承父类的属性和方法,实现代码复用。比如“电动汽车”继承“汽车”,拥有汽车的所有功能,还可以增加充电功能。
  • 多态:同一个行为,不同对象表现出不同形态。比如“动物”都有“叫”的方法,猫叫“喵”,狗叫“汪”。
  • 抽象(常作为第四特征):只定义规范,不实现具体细节。比如“形状”有“计算面积”的方法,但不知道具体怎么算。

3. 类与对象

  • :图纸。定义了一类事物共有的属性和行为。
  • 对象:根据图纸造出来的实物。每个对象都有自己的状态(属性值)。

三、实操代码案例 + 场景说明

场景:你要开发一个学生管理系统,需要描述学生的基本信息(姓名、年龄、成绩),并能打印自我介绍。

1. 封装示例

publicclassStudent{// 私有属性(隐藏内部数据)privateStringname;privateintage;privatedoublescore;// 构造方法(创建对象时初始化)publicStudent(Stringname,intage,doublescore){this.name=name;setAge(age);// 调用setter做校验this.score=score;}// 公共 getter/setter(提供访问入口)publicStringgetName(){returnname;}publicintgetAge(){returnage;}publicdoublegetScore(){returnscore;}publicvoidsetAge(intage){if(age>=0&&age<=120){this.age=age;}else{thrownewIllegalArgumentException("年龄非法");}}// 行为方法publicvoidintroduce(){System.out.println("我是"+name+",今年"+age+"岁,成绩"+score);}}

2. 继承示例

// 父类classPerson{protectedStringname;publicPerson(Stringname){this.name=name;}publicvoideat(){System.out.println(name+"在吃饭");}}// 子类classTeacherextendsPerson{privateStringsubject;publicTeacher(Stringname,Stringsubject){super(name);this.subject=subject;}publicvoidteach(){System.out.println(name+"教"+subject);}// 重写父类方法@Overridepublicvoideat(){System.out.println(name+"老师在食堂吃饭");}}

3. 多态示例

Personp=newTeacher("张老师","Java");p.eat();// 输出:张老师在食堂吃饭(子类重写的方法)// p.teach(); // 编译错误,父类引用无法调用子类特有方法if(pinstanceofTeacher){Teachert=(Teacher)p;t.teach();// 向下转型后可以调用}

四、避坑要点

错误/误区后果正确做法
把所有属性都写成public数据不安全,难以维护private+getter/setter
继承时重写方法忘了写@Override容易写错成重载,导致意外不执行始终加上@Override注解
多态时滥用instanceof和向下转型代码冗长,违反开闭原则优先在父类中定义足够的方法
构造方法中调用可被子类重写的方法子类未完全初始化,可能空指针构造方法中只调用private/final方法

五、面试高频考点

Q1:面向对象和面向过程的区别?

面向过程以函数为中心,数据与函数分离,适合简单、固定流程的任务。面向对象以对象为中心,封装、继承、多态使代码更易维护和扩展。

Q2:继承和组合如何选择?

继承是“is-a”关系(狗是动物),组合是“has-a”关系(汽车有引擎)。组合更灵活,避免继承的紧耦合,优先使用组合。

Q3:多态的实现原理(JVM层面)?

通过方法表(vtable)实现。子类重写方法会替换父类方法在方法表中的条目,运行时根据实际对象类型查找调用。

六、练习题

  1. 设计题:定义一个BankAccount类,包含账号、余额、存款、取款方法,要求余额不能为负,取款不能超过余额。
  2. 代码阅读:给出以下代码输出,并解释原因。
    classA{voidprint(){System.out.print("A");}}classBextendsA{voidprint(){System.out.print("B");}}publicclassTest{publicstaticvoidmain(String[]args){Aa=newB();a.print();}}
  3. 动手:创建一个Animal父类和CatDog子类,实现多态调用makeSound()

👉 下一篇预告

《Java基本数据类型》

内容简介:8种基本类型分别占多少字节?取值范围是多少?默认值是什么?类型转换有哪些陷阱?

💡 学完这篇,你将彻底掌握 Java 的数据根基,写出更高效、更安全的代码。

📌下一篇预计明天10:00更新
👉 点击关注我,更新后第一时间收到推送!
📌 本系列每天一篇,建议收藏 + 关注,一起30天从入门到就业。

http://www.jsqmd.com/news/778497/

相关文章:

  • 【Git】入门,基本操作
  • Perplexity AI API封装库实战:构建带引用功能的智能搜索应用
  • 从零实现轻量级LLM推理引擎:nano-vllm核心原理与工程实践
  • LangGraph 的结构
  • vscode-dark-islands的测试运行操作:色彩与图标优化
  • AI任务分解与执行框架:从原理到实战构建智能工作流引擎
  • 5分钟掌握Zotero Style:让你的文献管理从混乱到高效的终极指南
  • vscode-dark-islands主题下的R Markdown编辑:代码块与文本色彩区分
  • MoveIt 核心架构深度解析:理解机器人运动规划的全流程
  • BookPlayer开发者指南:如何为开源音频播放器项目贡献代码
  • 老司机翻车记:双路E5+PVE7.0直通GTX1060,我踩过的那些坑和最终解法
  • Beancount文档建设终极指南:从新手入门到API开发的完整教程
  • #2026最新靠谱包装印刷公司推荐!国内权威榜单发布,广东佛山等地实力企业精选 - 十大品牌榜
  • CodeAtlas:代码可视化分析工具的设计原理与应用实践
  • AI智能体执行器:从意图到安全动作的工程实现
  • 用Matlab手把手教你搭建IMM目标跟踪仿真环境(CV/CA/CT模型代码详解)
  • ***对于UPX反调试一类题的做法***
  • UNIAGENT:统一AI智能体框架的设计原理与实战应用
  • FPGA设计避坑指南:手把手教你搞定跨时钟域信号处理(附Verilog代码)
  • TAO窗口库:跨平台Rust应用开发的终极指南
  • 声学超材料:用共振抵消原理精准降噪,解决低频噪音难题
  • 预加载资源怎么写_link rel=preload用法【操作】
  • Super Productivity周数混乱终极修复指南:从源码分析到彻底解决
  • ai率飙到80%不用慌,亲测三个降ai率技巧,附降ai率工具,帮你高效降ai - 殷念写论文
  • ngx_http_proxy_connect_module安全配置最佳实践:保护你的HTTP隧道代理
  • 第8篇:Java基本数据类型
  • 哪里可以查看 Kubernetes 的官方简介?
  • 数据工程终极指南:掌握高效数据管理策略的7个核心技巧
  • 小红书校招怎么准备:别把它当纯 C++ 公司,推荐、搜索和性能语境才是主线
  • IEEE 1588 PTP协议在工业以太网中的实现:从硬件时间戳到伺服算法的深度解析