0

0

什么是Java中的面向对象编程_OOP四大特性通俗易懂解析

P粉602998670

P粉602998670

发布时间:2026-03-12 08:54:32

|

999人浏览过

|

来源于php中文网

原创

不能直接 public 字段,因缺乏校验和控制;应 private 字段 + 带逻辑的 getter/setter,如 setage() 中校验年龄范围;封装不完整(无 getter/setter)或校验缺失均导致形同虚设。

什么是java中的面向对象编程_oop四大特性通俗易懂解析

封装:为什么不能直接 public 一个字段?

因为直接暴露 nameage 字段,等于把数据库表裸奔在大街上——谁都能改、谁都能读,连“年龄不能是负数”这种基本校验都得靠调用方自觉。

真正安全的封装是:用 private 锁住字段 + 提供带逻辑的 setName()setAge() 方法。比如 setAge(int age) 里加一句 if (age 150) throw new IllegalArgumentException();,错误就拦在入口,而不是等业务出 bug 后才排查。

  • 常见错误:只加 private 却不写 getter/setter → 外部完全无法访问,类变废砖
  • 容易踩的坑:在 setter 里直接赋值,没做空值或范围检查 → 表面封装了,实际形同虚设
  • 真实场景:用户注册时 setPassword(String pwd) 必须加密存储,绝不能原样保存

继承:extends 不是万能复用键

继承表达的是严格的 “is-a” 关系(比如 Dog is-a Animal),不是“能用就拿来”。滥用 extends 会导致子类被迫继承一堆无关行为,后期改一个父类方法,可能意外影响十几个子类。

更轻量、更安全的复用方式其实是组合:让 Dog 持有一个 Legs 对象,而不是继承它。Java 只支持单继承,这点硬性限制也倒逼你思考“到底该不该继承”。

立即学习Java免费学习笔记(深入)”;

Kacha
Kacha

KaCha是一款革命性的AI写真工具,用AI技术将照片变成杰作!

下载
  • 常见错误:为复用工具方法而让无关类继承(如 ReportService extends StringUtils)→ 违反语义,编译都过不了
  • 关键细节:super() 必须是子类构造器第一行;没写的话,编译器会自动加 super(),但若父类没无参构造器,就会报错 Implicit super constructor is undefined
  • 性能影响:继承本身无开销,但深度继承链(>5 层)会让方法查找变慢,JVM 需要逐层向上找重写方法

多态:父类引用调用子类方法,为什么有时不生效?

多态生效的前提只有一个:运行时对象确实是子类实例。写成 Animal a = new Dog(); a.bark(); 是错的——bark()Dog 特有方法,Animal 类里没有,编译直接失败。

正确姿势是:父类定义通用行为(如 makeSound()),子类各自重写。然后用 Animal a = new Dog(); a.makeSound(); → 此时才触发动态绑定,调到 Dog 的实现。

  • 常见错误:重载(overload)和重写(override)混淆 → 前者是编译期决定,后者才是多态核心
  • 参数差异:@Override 方法签名必须严格一致(包括返回类型,Java 5+ 支持协变返回,但仍是子类类型)
  • 容易忽略:static 方法不能被重写,只能被隐藏;private 方法也不能被重写,子类里同名方法只是新定义

抽象:接口和抽象类,到底选哪个?

接口(interface)适合定义“能做什么”,比如 DrawableRunnable;抽象类(abstract class)适合定义“是什么 + 共享实现”,比如 Animal 可以提供默认的 breath() 实现,又强制子类实现 makeSound()

Java 8+ 接口可以有 default 方法,但这不意味着它该替代抽象类——default 方法只能提供“可选能力”,不能持有状态(没字段),也不支持构造器逻辑。

  • 使用场景:Shape 是抽象类(有面积公式共性 + 要求子类算面积),Resizable 是接口(任意对象都可实现,不关心它是不是 Shape)
  • 兼容性注意:给已有接口加 default 方法是二进制兼容的;但加抽象方法,所有实现类必须立刻更新,否则编译失败
  • 真实坑点:接口中字段默认是 public static final,哪怕你写 int MAX_SIZE = 100;,别人也能直接用 MyInterface.MAX_SIZE —— 别当常量容器乱塞配置
抽象类里的字段可以被子类继承并初始化,接口不行;多态调用时,JVM 看的是 new 后面那个类,不是左边声明的类型——这点一旦记混,debug 时会反复怀疑人生。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号