【潜意识Java】深入理解 Java 面向对象编程(OOP)
目录
什么是面向对象编程(OOP)?
1. 封装(Encapsulation)
Java 中的封装
2. 继承(Inheritance)
Java 中的继承
3. 多态(Polymorphism)
Java 中的多态
4. 抽象(Abstraction)
Java 中的抽象类
5. 接口(Interface)
总结
在软件开发的世界中,面向对象编程(OOP)是一种非常强大的编程范式,它通过模拟现实世界的对象和它们之间的交互来组织代码。Java,作为一种典型的面向对象编程语言,天然地支持这一编程范式。掌握 Java 中的面向对象编程,将有助于你写出更加高效、灵活且易于维护的代码。
本文将通过实例介绍 Java 中的面向对象编程的核心概念,包括类与对象、继承、多态和封装等。希望通过通俗易懂的讲解,帮助你更好地理解这些概念,并且能够应用到实际的编程中。
什么是面向对象编程(OOP)?
面向对象编程(Object-Oriented Programming, OOP)是一种将程序视为由对象组成的编程方法。每个对象都是类的一个实例,并且每个对象都包含数据(属性)和行为(方法)。OOP 通过“封装、继承和多态”这三大特性来帮助开发者构建高效的程序结构。

1. 封装(Encapsulation)
封装是 OOP 中最基本的概念之一,它指的是将对象的属性和方法封装在一起,并通过访问控制来保护数据不被外部直接修改。封装的目的是提高数据的安全性和灵活性。
Java 中的封装
在 Java 中,我们通常通过定义类来封装数据和方法。通过 private 关键字限制访问权限,而通过公共的 getter 和 setter 方法来访问和修改属性。
class Person {// 私有属性private String name;private int age;// 公共的 getter 方法public String getName() {return name;}// 公共的 setter 方法public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {if (age > 0) {this.age = age;} else {System.out.println("年龄必须大于0");}}
}
在上述代码中,Person 类的 name 和 age 属性被声明为 private,无法直接从外部访问。通过提供公共的 getName() 和 setName() 方法,外部代码可以安全地访问和修改这些属性。

2. 继承(Inheritance)
继承是面向对象编程中的一个重要概念,它允许一个类从另一个类继承属性和方法。继承可以帮助我们复用已有的代码,并且支持类的层次结构。
Java 中的继承
Java 中的继承是通过 extends 关键字实现的。子类可以继承父类的属性和方法,还可以重写父类的方法来实现特定的功能。
class Animal {void eat() {System.out.println("Animal is eating");}
}class Dog extends Animal {void bark() {System.out.println("Dog is barking");}@Overridevoid eat() {System.out.println("Dog is eating");}
}
在这个例子中,Dog 类继承了 Animal 类。它不仅可以访问 Animal 类中的 eat() 方法,还重写了 eat() 方法,使得 Dog 类具有了自己特有的行为。

3. 多态(Polymorphism)
多态是指同一方法可以根据不同对象的不同实现产生不同的行为。通过多态,可以用父类类型的变量来指向子类对象,而实际调用的是子类重写的方法。
Java 中的多态
Java 中的多态可以通过方法重载和方法重写来实现。方法重载是同一方法名,根据不同参数类型或数量来区分,而方法重写则是子类对父类方法的重新定义。
class Animal {void makeSound() {System.out.println("Animal makes sound");}
}class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Dog barks");}
}class Cat extends Animal {@Overridevoid makeSound() {System.out.println("Cat meows");}
}public class TestPolymorphism {public static void main(String[] args) {Animal animal = new Animal();Animal dog = new Dog();Animal cat = new Cat();animal.makeSound(); // 输出 "Animal makes sound"dog.makeSound(); // 输出 "Dog barks"cat.makeSound(); // 输出 "Cat meows"}
}
在这个例子中,Animal 类有一个 makeSound() 方法,而 Dog 和 Cat 类分别重写了该方法。通过父类类型的引用,程序可以表现出不同的行为,这是多态的典型应用。

4. 抽象(Abstraction)
抽象是 OOP 中的另一个重要特性,它帮助我们隐藏不必要的实现细节,只暴露必要的接口。抽象通常通过抽象类和接口来实现。
Java 中的抽象类
抽象类是一种不能实例化的类,它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。子类可以继承抽象类并实现其中的抽象方法。
abstract class Shape {abstract void draw();void color() {System.out.println("Coloring the shape");}
}class Circle extends Shape {@Overridevoid draw() {System.out.println("Drawing a circle");}
}class Square extends Shape {@Overridevoid draw() {System.out.println("Drawing a square");}
}
5. 接口(Interface)
接口是抽象化的另一种形式,它只定义方法的签名,不能包含方法的实现。类实现接口后,必须实现接口中的所有方法。
interface Animal {void sound();
}class Dog implements Animal {@Overridepublic void sound() {System.out.println("Dog barks");}
}class Cat implements Animal {@Overridepublic void sound() {System.out.println("Cat meows");}
}
通过接口,我们可以让多个不相关的类具备相同的行为,而不需要它们之间存在继承关系。
总结
Java 中的面向对象编程通过封装、继承、多态和抽象等概念,帮助开发者构建清晰、灵活且可维护的代码结构。无论是开发企业级应用,还是编写小型项目,掌握这些基本的 OOP 概念都将大大提高编程效率和代码质量。
- 封装 提高了数据安全性和代码的可维护性。
- 继承 提高了代码复用性,减少了重复代码。
- 多态 使得代码更具灵活性,能够根据实际情况执行不同的操作。
- 抽象 让我们能够关注重要的业务逻辑,忽略具体的实现细节。
通过不断学习和实践,你将能够将面向对象的设计理念应用到实际项目中,编写出更简洁、优雅且可扩展的代码。
相关文章:
【潜意识Java】深入理解 Java 面向对象编程(OOP)
目录 什么是面向对象编程(OOP)? 1. 封装(Encapsulation) Java 中的封装 2. 继承(Inheritance) Java 中的继承 3. 多态(Polymorphism) Java 中的多态 4. 抽象&…...
windows同时使用多个网卡
windows同时链接了有线网络,多个无线网卡,默认会使用有线网络,如果想要局域网内使用某个特定的网络,可以设置静态ip 1. 首先删除原来的静态网络(不冲突可以不删除),我这里usb无线网卡切换过usb插口,这里需要删除原来的. 使用 route print 查看接口列表及静态路由信息 route p…...
Spark执行计划解析后是如何触发执行的?
在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点…...
B4X编程语言:B4X控件方法汇总
1、AddNode、AddView方法 AddNode(Node As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J控件 AddView(View As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J的B4XView …...
基于XML配置Bean和基于XML自动装配
目录 基于XML配置Bean id分配规则 通过id获取bean 通过类型获取bean 通过C命名空间配置bean 使用C命名空间 通过P命名空间配置bean 通过util:list进行配置bean 指定id,直接ref引用过来 通过外部属性文件配置Bean Bean信息重用(继承)…...
全排列 dfs
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有 a<b<…<y<z ,而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入格式 输入只有一行,是一个由不同的小写字母组成的字符串…...
linux内存相关命令的尝试
文章目录 前言freeMem 部分的解释Swap 部分的解释 vmstatProcs (进程)Memory (内存)Swap (交换)IO (磁盘 I/O)System (系统)CPU (处理器) pidstat标题行解释数据列解释 sar字段含义解释示例分析 总结 前言 菜就多练,昨天看了一篇有关剖析 RocksDB 内存超限问题的文…...
Vue2 基础
Vue 2 是 Vue.js 的第二个主要版本,于 2016 年发布。它是一个渐进式的 JavaScript 框架,以其简单、灵活、易用性高而广受欢迎。Vue 2 主要专注于构建用户界面(UI),并且非常适合用于构建单页应用(SPA&#x…...
递归问题(c++)
递归设计思路 数列递归 : 如果一个数列的项与项之间存在关联性,那么可以使用递归实现 ; 原理 : 如果一个函数可以求A(n),那么该函数就可以求A(n-1),就形成了递归调用 ; 注意: 一般起始项是不需要求解的,是已知条件 这就是一个典型…...
系统思考—战略决策
别用管理上的勤奋,来掩盖经营上的懒惰。 日本一家物业公司,因经营不善,面临生死存亡的危机。老板为了扭转局面,采取了很多管理手段——提高员工积极性,推行业绩与绩效挂钩,实施各种考核制度。然而…...
wxwidgets xml插入图片的两种方案
wxwidgets xml插入图片的两种方案: 1.使用wxWidgets中的wxRichTextCtrl插入图片,将wxRichTextCtrl的buffer导出为xml文件 参考richtextctrl例子 if (wxTheClipboard->IsSupported(wxDF_BITMAP)){wxBitmapDataObject data;wxTheClipboard->GetData(data);wxBitmap bi…...
大模型呼入机器人如何赋能呼叫中心?(转)
大模型呼入机器人如何赋能呼叫中心?(转) 原作者:开源呼叫中心FreeIPCC 大模型呼入机器人在赋能呼叫中心方面发挥着重要作用,主要体现在以下几个方面: 一、提升服务效率与质量 24小时不间断服务: 大模型呼入机器人能…...
linux下socket本地套接字通讯
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。socket进程通信与网络通信使用的是统一套接口,只是地址结构与某些参数不同。 用途 进程间通信:本地套…...
NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用
NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用 第一部分: void RPC_ENTRY NDRCContextUnmarshall ( // process returned context OUT NDR_CCONTEXT PAPI *phCContext,// stub context to update IN RPC_BINDING_HANDLE hRPC, …...
WebView2教程(基于C++)【一】环境初始化
创建一个VisualStudio C项目,通过NuGet包管理器安装两个包: 注意,在项目属性页设置项目使用:C 20,子系统设置成窗口(相应的预处理器也要改变),DPI识别设置成每个监视器高DPI识别。 …...
go语言中context的用法
0 概述 Context 是 Go 语言中非常重要的一个概念,它主要用于跨多个函数或 goroutine 传递 取消信号、超时控制、截止时间 和 请求范围数据。在并发编程中,Context 提供了更好的控制和管理,尤其是当你需要在多个 goroutine 之间传递状态或进行…...
概括网络给社会生活带来的种种影响
题目 【2002年国考申论】给定资料反映了网络给社会生活带来的种种影响,用不超过200字对这些影响进行概括。 要求:全面,有条理,有层次。(20分) 审题 特定事实:网络给社会生活带来的种种影响基本题型:单一…...
OpenCV相机标定与3D重建(16)将点从齐次坐标转换为非齐次坐标函数convertPointsFromHomogeneous()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::convertPointsFromHomogeneous 是 OpenCV 库中的一个函数,用于将点从齐次坐标(homogeneous coordinates)…...
Jmeter如何对UDP协议进行测试?
Jmeter如何对UDP协议进行测试? 1 jmeter-plugins安装2 UDP-Protocol Support安装3 UDP协议测试 1 jmeter-plugins安装 jmeter-plugins是Jmeter的插件管理器;可以组织和管理Jmeter的所有插件;直接进入到如下页面,选择如图的选项进…...
Unix 传奇 | 谁写了 Linux | Unix birthmark
注:本文为 “左耳听风”陈皓的 unix 相关文章合辑。 皓侠已走远,文章有点“年头”,但值得一阅。 文中部分超链已沉寂。 Unix 传奇 (上篇) 2010 年 04 月 09 日 陈皓 了解过去,我们才能知其然,更知所以然。总结过去…...
数字人项目救星:lite-avatar形象库150+免费形象开箱即用
数字人项目救星:lite-avatar形象库150免费形象开箱即用 还在为数字人项目找不到合适、好看又免费的形象发愁吗?自己训练模型,耗时耗力,效果还不一定好;购买商业形象库,成本高昂,预算有限根本玩…...
清音听真实战案例:Qwen3-ASR-1.7B在会议纪要场景的100%标点还原效果
清音听真实战案例:Qwen3-ASR-1.7B在会议纪要场景的100%标点还原效果 1. 引言:当AI“听懂”了会议的呼吸与停顿 想象一下这个场景:一场持续两小时的产品需求评审会刚刚结束。你看着录音文件,想到要逐字逐句地整理成会议纪要&…...
环保EPC工程企业如何选型工程项目管理系统
环保EPC工程(设计-采购-施工一体化)具有项目周期长、场景复杂、合规要求高、多参与方协同难度大等核心特点,涵盖烟气处理、水处理、环保设备安装等细分场景,其项目管理涉及设计、采购、施工、安全、环保合规、成本管控等多个环节&…...
ChatGLM3-6B零基础部署:Streamlit重构版5分钟快速搭建本地智能助手
ChatGLM3-6B零基础部署:Streamlit重构版5分钟快速搭建本地智能助手 1. 引言:为什么你需要一个本地专属的AI助手? 想象一下,你正在写一份重要的技术报告,需要快速查询某个编程概念;或者你在分析一份长达几…...
解决Tailwind Next.js博客构建9大痛点:从开发到部署全流程指南
解决Tailwind Next.js博客构建9大痛点:从开发到部署全流程指南 【免费下载链接】tailwind-nextjs-starter-blog This is a Next.js, Tailwind CSS blogging starter template. Comes out of the box configured with the latest technologies to make technical wri…...
OpenClaw安全加固:Phi-3-vision服务接口的权限控制实践
OpenClaw安全加固:Phi-3-vision服务接口的权限控制实践 1. 为什么需要安全加固? 上周我在本地部署了Phi-3-vision多模态模型,通过OpenClaw实现了一个智能图片分析工作流。但当我用手机测试时,意外发现任何人都能通过公网IP访问我…...
python cx_freeze
# 关于 PyInstaller,一位 Python 老手的随想 最近在整理一些旧项目,又用到了 PyInstaller 这个工具。说起来,它算是 Python 开发中一个既熟悉又容易被忽视的存在。很多开发者第一次接触它,往往是为了把写好的脚本发给不会装 Pytho…...
STM32开发库对比:寄存器、SPL、HAL与LL深度解析
1. STM32开发库全景解析:从寄存器到HAL/LL的深度对比从事嵌入式开发这些年,我见证了STM32生态系统的快速演进。记得刚接触STM32F103时,标准外设库还是主流选择,如今Cube生态已成标配。本文将结合我的实际项目经验,详细…...
RT-Thread 4.1.0内核更新与静态HOOK机制解析
1. RT-Thread 4.1.0内核更新概览RT-Thread作为国内领先的物联网实时操作系统,其4.1.0版本的发布标志着内核稳定性和功能性又迈上了一个新台阶。作为一名长期使用RT-Thread进行嵌入式开发的工程师,我发现这次更新虽然看似改动不大,但每个特性都…...
用Python从零解析ARS548 4D毫米波雷达数据:一个完整的数据处理与可视化实战教程
用Python从零解析ARS548 4D毫米波雷达数据:一个完整的数据处理与可视化实战教程 在自动驾驶和智能交通领域,4D毫米波雷达正成为感知系统的核心传感器之一。相比传统毫米波雷达,ARS548等新一代4D雷达不仅能提供目标的距离、速度和方位角信息&a…...
