【java】三大特性(封装、继承、多态)

【java】三大特性(封装、继承、多态)

Java三大特性详解:封装、继承、多态一次讲透

Java 作为一门典型的面向对象语言,有三个核心特性:

✅ 封装(Encapsulation)
✅ 继承(Inheritance)
✅ 多态(Polymorphism)

很多人会背概念,但真正写代码时却容易混淆。

这篇文章带你系统理解它们的本质与实际应用场景。


一、封装(Encapsulation)

1️⃣ 什么是封装?

封装的核心思想:

隐藏内部实现细节,对外只暴露必要的接口。

通俗理解:

👉 “该给你看的给你,不该看的别动。”


2️⃣ 封装的实现方式

  • 使用 private 修饰成员变量
  • 提供 public 的 getter / setter 方法
  • 控制访问权限(public / protected / default / private)

示例:

publicclassUser{privateString username;// 私有属性publicStringgetUsername(){return username;}publicvoidsetUsername(String username){if(username ==null|| username.isEmpty()){thrownewIllegalArgumentException("用户名不能为空");}this.username = username;}}

优势:

✔ 防止数据被随意修改
✔ 可以在 setter 中增加校验逻辑
✔ 降低耦合性
✔ 便于维护和扩展


二、继承(Inheritance)

1️⃣ 什么是继承?

继承是:

子类复用父类的属性和方法。

关键字:

extends

示例:

publicclassAnimal{publicvoideat(){System.out.println("动物在吃东西");}}publicclassDogextendsAnimal{publicvoidbark(){System.out.println("狗在叫");}}

2️⃣ 继承的特点

  • Java 不支持多继承(类只能继承一个父类)
  • 子类可以重写父类方法
  • 子类可以扩展父类功能

方法重写示例:

@Overridepublicvoideat(){System.out.println("狗在吃骨头");}

三、多态(Polymorphism)

1️⃣ 什么是多态?

多态的本质:

同一父类引用,指向不同子类对象。

示例:

Animal animal =newDog(); animal.eat();

输出:

狗在吃骨头 

说明:

  • 编译时看左边(父类类型)
  • 运行时看右边(实际对象)

2️⃣ 多态的前提

必须满足:

  1. 有继承关系
  2. 方法被重写
  3. 父类引用指向子类对象

3️⃣ 多态的意义

✔ 解耦
✔ 可扩展性强
✔ 符合开闭原则
✔ 框架设计核心思想

Spring 中大量使用多态思想,例如:

List list =newArrayList();

四、继承普通类 vs 抽象类 vs 接口

很多人搞不清楚三者区别,这里一次对比清楚。

特性继承普通类继承抽象类实现接口
关键字extendsextendsimplements
能否实例化可以不可以不可以
是否可有构造方法
是否可有成员变量可以可以只能是常量
抽象方法不必须可以有Java8前必须全是抽象方法
多继承❌ 不支持❌ 不支持✅ 可实现多个接口

什么时候用哪种?

使用普通继承:

👉 明确是“is-a”关系
如:Dog 是 Animal


使用抽象类:

👉 有部分公共实现
👉 需要强制子类实现部分方法

publicabstractclassTemplate{publicvoidprocess(){step1();step2();}abstractvoidstep1();abstractvoidstep2();}

使用接口:

👉 只定义规范
👉 需要多实现能力

publicinterfaceFlyable{voidfly();}

Java8 之后接口可以有:

  • default 方法
  • static 方法

五、三大特性的关系

很多人误以为它们是独立的。

实际上:

封装 → 提供安全结构 继承 → 提供代码复用 多态 → 提供扩展能力 

它们共同构成面向对象的核心思想。


六、面试常问问题

1️⃣ 为什么 Java 不支持类的多继承?

因为:

  • 菱形继承问题
  • 复杂性过高
  • 可维护性差

Java 用接口解决多继承问题。


2️⃣ 多态是编译期还是运行期行为?

  • 方法重载 → 编译期
  • 方法重写 → 运行期

七、总结

Java 三大特性核心理解:

✔ 封装:控制访问
✔ 继承:代码复用
✔ 多态:行为扩展

Read more

基于Java+SpringBoot+SSM闲置物品循环交易保障系统(源码+LW+调试文档+讲解等)/闲置物品交易系统/循环交易平台/物品循环利用系统/交易保障机制/闲置物品处理系统/循环交易保障

基于Java+SpringBoot+SSM闲置物品循环交易保障系统(源码+LW+调试文档+讲解等)/闲置物品交易系统/循环交易平台/物品循环利用系统/交易保障机制/闲置物品处理系统/循环交易保障

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题大全✅ 2025-2026年最新500个热门微信小程序毕业设计选题大全✅ Java毕业设计最新1000套项目精品实战案例 微信小程序毕业设计最新500套项目精品案例 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 本文项目技术选型介绍 前端:Spring+SpringMVC+Mybatis 后端:SpringBoot+Mybatis 数据库:MySQL、SQLServer 开发工具:IDEA、Eclipse、Navicat等 ✌关于毕设项目技术实现问题讲解也可以给我留言咨询!!! 详细视频演示 请联系博主获取更详细的演示视频-源码编号4472 具体实现截图 框架介绍 前端技术介绍 SSM 框架在程序设计中具有不可替代的地位。它不仅提供了丰富的功能和强大的性能

By Ne0inhk
飞算JavaAI:Java开发新时代的破晓之光

飞算JavaAI:Java开发新时代的破晓之光

免责声明:此文章的所有内容皆是本人实验测评,并非广告推广,并非抄袭。如有侵权,请联系,谢谢! 【#飞算JavaAl炫技赛】 【#Java开发】 摘要:飞算JavaAI作为全球首款聚焦Java的智能开发助手,凭借自然语言交互、全流程智能生成等功能,实现开发效率十倍飞跃,生成规范高质量的完整工程代码,降低维护成本,适用于多行业,引领Java开发迈向智能化新时代。 一、引言:Java开发变革的序章 在数字化浪潮席卷的当下,Java作为软件开发领域的“中流砥柱”,地位举足轻重。从支撑互联网应用的稳定运行,到助力企业级系统的高效管理;从推动移动开发的蓬勃发展,到在大数据处理中发挥关键作用,Java凭借其强大的跨平台性、卓越的稳定性以及丰富的类库,成为无数关键业务运行的基石。据统计,全球Java开发者数量已突破千万,广泛分布于金融、电信、电商等各个行业,为数字世界的繁荣发展贡献着力量。 然而,随着业务需求的日益复杂和快速变化,传统Java开发模式正面临前所未有的挑战。开发周期漫长、效率低下、代码维护成本高昂等问题,如同沉重的枷锁,束缚着企业创新的步伐。相关数据显示,在企业级项目中,平均

By Ne0inhk
Java微服务架构设计模式:构建云原生时代的分布式系统

Java微服务架构设计模式:构建云原生时代的分布式系统

Java微服务架构设计模式:构建云原生时代的分布式系统 在云计算与微服务盛行的时代,分布式系统已成为企业级应用的核心架构。Java凭借其强大的生态系统和成熟的并发模型,在分布式系统开发中占据主导地位。本文将深入解析Java微服务架构的设计模式、实战经验与最佳实践。 一、微服务架构基础与演进 1.1 从单体架构到微服务 传统单体架构面临的主要挑战包括: * 技术栈僵化:难以采用新技术 * 可扩展性差:只能整体扩展,无法按需缩放 * 交付周期长:微小修改需要整体部署 * 可靠性低:单点故障导致整个系统崩溃 微服务架构通过将应用拆分为一组小型服务解决了这些问题,每个服务: * 围绕业务能力构建 * 可独立部署和扩展 * 拥有独立的数据存储 * 通过轻量级机制通信 单体应用网关服务用户服务订单服务产品服务用户数据库订单数据库产品数据库 图:从单体架构到微服务架构的演进 1.2 Java微服务生态体系 Java拥有最完善的微服务开发生态: 组件类型主流框架特点开发框架Spring Boot快速开发、自动配置服务治理Spring Cloud Netfl

By Ne0inhk
Java 内部类

Java 内部类

文章目录 * 内部类 * 实例内部类 * 静态内部类 * 匿名内部类 * 局部内部类 内部类 1. 一个事物的内部,还需要一个完整的结构进行描述,而这个结构只为外部服务,这个内部的完整结构叫内部类 2. 可以将一个类定义到另一个类内,或一个方法内,里面的是内部类,外面的是外部类 实例内部类 1. 如何实例化内部类 2. 外部类的成员在内部类中都能直接访问 packagetest2;class outClass{privateint a =3;publicstaticint b =2;class inClass{privateint a =1;// 在运行时确定的// static修饰的调用不需要实例化就能调用,而这个变量在内部类需要实例化内部类才能使用// public static int d = 2;publicstaticfinalint d =3;// 在编译的时候就确定了,是个常量,不依赖于实例化publicint

By Ne0inhk