JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

    • JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)
    • **一、封装(Encapsulation)**
      • **1. 什么是封装?**
      • **2. 如何实现封装?**
      • **3. 代码示例**
      • **4. 封装的好处**
    • **二、继承(Inheritance)**
      • **1. 什么是继承?**
      • **2. 代码示例**
      • **3. 继承的注意事项**
    • **三、多态(Polymorphism)**
      • **1. 什么是多态?**
      • **2. 方法重写(Override)**
      • **3. 向上转型(Upcasting)**
      • **4. 多态的优势**
    • **四、总结与对比**
    • **五、常见问题**
      • **1. 方法重载(Overload) vs 方法重写(Override)**
      • **2. 什么时候用继承?**


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)

好的!封装、继承和多态是面向对象编程(OOP)的三大核心特性,理解它们对掌握Java至关重要。我会用通俗易懂的方式为你讲解,并结合代码示例帮助你理解。


一、封装(Encapsulation)

1. 什么是封装?

  • 定义:将数据(属性)和操作数据的方法(行为)捆绑在一个类中,并对外隐藏内部实现细节。
  • 核心思想:隐藏对象的属性和实现细节,仅对外公开接口(方法)进行交互。
  • 目的:提高安全性、可维护性、灵活性(例如:避免属性被随意修改)。

2. 如何实现封装?

  • 使用访问修饰符控制属性的可见性:
    • private:属性只能在当前类内访问。
    • public:属性或方法可以被任何类访问。
    • protected:允许子类和同包类访问。
  • 提供公共的getter和setter方法操作属性。

3. 代码示例

public class Student {// 私有属性,外部无法直接访问private String name;private int age;// 公共的getter方法,允许外部获取属性值public String getName() {return name;}// 公共的setter方法,允许外部设置属性值(可添加校验逻辑)public void setName(String name) {if (name != null && !name.isEmpty()) {this.name = name;}}public int getAge() {return age;}public void setAge(int age) {if (age >= 0 && age <= 120) {  // 校验年龄合法性this.age = age;}}
}// 使用示例
public class Main {public static void main(String[] args) {Student stu = new Student();stu.setName("Alice");stu.setAge(20);System.out.println(stu.getName() + ": " + stu.getAge());}
}

4. 封装的好处

  • 安全性:防止属性被非法修改(如年龄为负数)。
  • 灵活性:可以在setter方法中添加校验逻辑,而外部调用者无需关心。
  • 代码维护:修改类的内部实现时,不影响外部代码。

二、继承(Inheritance)

1. 什么是继承?

  • 定义:子类(派生类)继承父类(基类)的属性和方法,并可以扩展自己的功能。
  • 核心思想:代码复用 + 扩展功能。
  • 语法:使用 extends 关键字。

2. 代码示例

// 父类:Animal
class Animal {private String name;public void eat() {System.out.println(name + " is eating.");}public void setName(String name) {this.name = name;}
}// 子类:Dog(继承Animal)
class Dog extends Animal {// 扩展自己的方法public void bark() {System.out.println("Woof! Woof!");}
}// 使用示例
public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.setName("Buddy");dog.eat();   // 调用父类方法dog.bark();  // 调用子类方法}
}

3. 继承的注意事项

  • 单继承:Java中一个类只能直接继承一个父类(不支持多继承)。
  • 构造方法:子类构造方法默认会调用父类的无参构造方法(可通过 super() 显式调用父类构造方法)。
  • 方法重写(Override):子类可以重写父类的方法(后面多态中详细讲解)。

三、多态(Polymorphism)

1. 什么是多态?

  • 定义:同一操作作用于不同对象,可以有不同的行为(例如:同一方法在不同子类中有不同实现)。
  • 两种形式
    1. 编译时多态(静态多态):方法重载(Overload)。
    2. 运行时多态(动态多态):方法重写(Override) + 向上转型(Upcasting)。

2. 方法重写(Override)

  • 子类重新定义父类中已有的方法。
  • 规则
    • 方法名、参数列表必须与父类方法相同。
    • 返回类型可以是父类方法返回类型的子类。
    • 访问权限不能比父类方法更严格。
class Animal {public void makeSound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {@Override  // 注解:表示重写父类方法public void makeSound() {System.out.println("Dog barks: Woof!");}
}class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows: Meow~");}
}

3. 向上转型(Upcasting)

  • 将子类对象赋值给父类引用变量。
  • 目的:通过父类引用调用子类重写的方法,实现多态。
public class Main {public static void main(String[] args) {Animal animal1 = new Dog();  // 向上转型Animal animal2 = new Cat();animal1.makeSound();  // 输出 Dog barks: Woof!animal2.makeSound();  // 输出 Cat meows: Meow~}
}

4. 多态的优势

  • 代码扩展性:新增子类时无需修改原有代码。
  • 统一接口:用父类引用处理不同子类对象。

四、总结与对比

特性核心思想关键实现方式
封装隐藏细节,暴露接口private属性 + getter/setter
继承代码复用,扩展功能extends关键字 + 方法重写
多态同一方法不同表现方法重写 + 向上转型

五、常见问题

1. 方法重载(Overload) vs 方法重写(Override)

  • 重载:同一类中,方法名相同,参数列表不同。
  • 重写:子类中重新实现父类方法。

2. 什么时候用继承?

  • 符合 “is-a” 关系时(例如:Dog is a Animal)。
  • 避免过度继承(优先考虑组合而非继承)。

通过这三个特性,你可以设计出灵活、可维护的Java程序。建议结合代码实践,尝试自己编写一些类,体会它们之间的关系!


📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

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

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

相关文章

Yolo迁移训练-带训练源码

目录 下载Git 拉下yolo模型 下载labelimg 准备训练集 迁移训练 继续训练 下载Git Git - Downloading Package 拉下yolo模型 然后用克隆脚本拉下yolo模型 python clone_yolo.py import os import subprocess import sys import shutildef check_git_installed():"…

LangChain框架-PromptTemplate 详解

摘要 本文聚焦于 LangChain 框架中PromptTemplate提示词模板模块的深度解析,主要参考langchain_core.prompts源码模块与官方文档。系统梳理 LangChain 对提示词模板的封装逻辑与设计思路,旨在帮助读者构建全面、深入的知识体系,为高效运用LangChain 框架的提示词模板开发应用…

中小企业设备预测性维护三步构建法:从零到精的技术跃迁与中讯烛龙实践

在工业4.0浪潮中&#xff0c;中小企业常陷入"设备故障频发"与"数字化成本高企"的双重困境。本文基于半导体、食品加工等行业实证数据&#xff0c;结合中讯烛龙系统技术突破&#xff0c;为中小企业提供一套零基础、低门槛、可扩展的预测性维护实施框架&…

C30-函数

一 函数的优点 避免代码冗长模块化的设计思路(十分类似组装电脑)按功能划分,每个函数代表一个功能 二 函数的三要素 函数要先定义再使用(就像是变量一样)三要素: 函数名→体现功能参数列表 比如yf(x)→x就是参数又如yf(x,y)→x,y就是参数→参数的个数取决于需求 返回值:比如…

【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案

在使用 Spring Boot 构建多模块项目&#xff0c;集成 MyBatis-Plus 时&#xff0c;很多开发者会遇到类似如下启动报错&#xff1a; Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…

pimpl与unique_ptr的问题

PImpl与std::unique_ptr组合 pimpl(Pointer to Implementation)是C程序开发中非常常用的技巧之一&#xff0c;它的好处有&#xff1a; 节省程序编译时间保持程序/库的二进制兼容性隐藏实现细节 举例一个常见的pimpl的使用示例&#xff1a; // a.h class Impl; //前置声明 c…

C++类和对象:构造函数、析构函数、拷贝构造函数

引言 介绍&#xff1a;C类和对象&#xff1a;构造函数、析构函数、拷贝构造函数 _涂色_博主主页 C基础专栏 一、类的默认成员函数 先认识一下类中的默认成员函数&#xff1a; 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。⼀个类…

CTF - PWN之ORW记录

CTF - Pwn之ORW记录https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q

RabbitMQ 中的六大工作模式介绍与使用

文章目录 简单队列&#xff08;Simple Queue&#xff09;模式配置类定义消费者定义发送消息测试消费 工作队列&#xff08;Work Queues&#xff09;模式配置类定义消费者定义发送消息测试消费负载均衡调优 发布/订阅&#xff08;Publish/Subscribe&#xff09;模式配置类定义消…

民宿管理系统6

普通管理员管理&#xff1a; 新增普通管理员&#xff1a; 前端效果&#xff1a; 前端代码&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…

vue3+ant design vue + Sortable实现多级表格列拖动

1、最近遇到个需求&#xff0c;需使用vue3ant design vue Sortable实现多级表格的表头允许用户拖拽移动。即当用户拖拽一级表头时&#xff0c;其对应的子级表头及数据应同步移动&#xff0c;并且只允许一级非固定表头允许拖拽。 2、代码 <a-table:data-source"rowDat…

第五十四篇 AI与数据分析

一、AI数据分析就像做菜 想象你在厨房做一道新菜&#xff0c;AI数据分析的流程其实非常相似&#xff1a; 买菜&#xff08;获取数据&#xff09; 去市场挑选新鲜蔬菜 从Excel/数据库获取数据例&#xff1a;pd.read_csv(超市销售表.csv) 洗菜切菜&#xff08;清洗数据&#x…

差分OPA verilogaA 模型

做电路设计&#xff0c;需要提前用理想模型如VerilogA模型做验证。这里分享一个由ahdlib库里单端opamp改造而来的差分opamp。参考何乐年的《模拟集成电路设计与仿真》10.4节423页&#xff1b; 描述的小信号模型如上。 VerilogA 用到了SRI/C&#xff0c;GBWgm/C,gaingm*r1等概念…

Solidity语言基础:区块链智能合约开发入门指南

一、Solidity概述 Solidity是以太坊生态系统中最重要的智能合约编程语言&#xff0c;由Gavin Wood于2014年提出。作为面向合约的高级语言&#xff0c;它结合了JavaScript、Python和C的语法特点&#xff0c;专为在以太坊虚拟机&#xff08;EVM&#xff09;上运行而设计。 核心…

开启智能Kubernetes管理新时代:kubectl-ai让操作更简单!

在如今的科技世界中,Kubernetes 已经成为容器编排领域的标杆,几乎所有现代应用的基础设施都离不开它。然而,面对复杂的集群管理和日常运维,许多开发者常常感到无所适从。今天,我们将为大家介绍一款结合了人工智能的强大工具——kubectl-ai。它不仅能帮助开发者更加顺畅地与…

2003-2020年高铁站开通时间数据

2003-2020年高铁站开通时间数据 1、时间&#xff1a;2003-2020年 2、来源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指标&#xff1a;高铁站名称、开通时间、所在省份、所在城市、所属线路名称 4、说明&#xff1a; Hsrwsnm[高铁站名…

神经网络—感知器、多层感知器

文章目录 前言一、生物神经元与感知器的类比二、感知器1、简单感知器2、多层感知器&#xff08;1&#xff09;多层感知机结构 3、神经网络结构 总结1、感知器的局限性如何突破感知器的局限性&#xff1f; 2、感知器的应用 前言 感知器&#xff08;Perceptron&#xff09;是神经…

避免数据丢失:在存储测试数据之前,要做好Redis持久化

Redis提供两种持久化方法&#xff1a; 一、RDB&#xff08;Redis DataBase&#xff09;&#xff1a; 1、周期性保存内存快照到磁盘&#xff08;生成 dump.rdb 文件&#xff09;。 2、配置save 相关参数。 我本地的配置如下&#xff1a; &#xff08;1&#xff09;配置文件re…

Oracle EBS FORM快捷键与触发器的关系与使用

Oracle EBS FORM快捷键与触发器的引用 1、快捷键作用&#xff0c;可以看文档fmrweb.res 2、文件内容&#xff1a;标识了快捷键的作用 9 : 0 : “Tab” : 1 : “Next Field” 9 : 1 : “ShiftTab” : 2 : “Previous Field” 116 : 0 : “F5” : 3 : “Clear Field” 38 : 0 :…

Java 24:重构数字信任边界 —— 后量子时代的智能安全防御体系构建

引言 在量子计算阴影与 AI 驱动攻击交织的网络安全新纪元&#xff0c;Java 平台正经历着自诞生以来最深刻的安全架构革新。作为企业级应用的核心基础设施&#xff0c;Java 24 不仅延续了 “一次编写&#xff0c;处处运行” 的跨平台基因&#xff0c;更以后量子密码学引擎、动态…