八股文-面向对象的理解
近年来,IT行业的环境相较以往显得有些严峻,因此一直以来,我都怀有一个愿望,希望能够创建一个分享面试经验的网站。由于个人有些懒惰,也较为喜欢玩乐,导致计划迟迟未能实现。然而,随着年底的临近,考虑到当前环境下许多开发者可能面临裁员等问题,我决定加速建设这个面试经验分享网站,以便为大家提供学习的平台,共同面对职场的挑战。
当然,我们建设这个网站的目标并非仅仅是为了背诵一些标准答案,而是以面试八股文为切入点,拓展我们的知识广度,构建起一个独特的知识体系。通过这个过程,我们希望能够在职业发展的道路上更为深入地理解行业趋势,形成自己独到的见解,在内卷的道路上越走越卷。
网站地址:http://blog.xiuji.mynatapp.cc/
那么作为一名java开发者,我们还是以面向对象来开启我们的知识分享吧。

面向对象的理解
面向对象编程(Object-Oriented Programming,OOP)是一种程序设计方法,其核心思想是将问题抽象为由若干个对象,通过这些对象之间的调用、配合及协调,共同完成当前的问题。
面向对象的三大基本特征:封装、继承和多态。
面向对象的五大基本原则:单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖反转原则。
面向对象的三大基本特性
面向对象编程(Object-Oriented Programming,OOP)有三大基本特征,它们是封装(Encapsulation)、继承(Inheritance)、和多态(Polymorphism);

- 封装
封装是面向对象编程的基本原则之一,它指的是将数据和操作数据的方法封装在一个单元内,即一个类中。封装通过访问控制修饰符(如private、protected、public)来限制对类的成员的访问。这种封装性能够隐藏对象的内部实现细节,只暴露必要的接口,提高了代码的安全性和可维护性。
- 继承
继承是一种机制,允许一个类(子类)基于另一个类(父类)的定义来构建。子类继承了父类的属性和方法,同时可以通过扩展或修改来增加或改变其行为。继承促进了代码的重用,通过建立类的层次结构,提高了代码的可维护性和扩展性。
- 多态
多态性是指同一个方法在不同的对象上产生不同的行为。在面向对象编程中,多态性有两种主要形式:编译时多态(静态多态)和运行时多态(动态多态)。
编译时多态: 通过方法的重载实现,同一个类中的多个方法拥有相同的名称但不同的参数列表。
运行时多态: 通过方法的覆盖实现,子类可以提供对父类方法的不同实现。
这三大特征共同构成了面向对象编程的基本框架,使得代码更易理解、扩展和维护。
面向对象的五大基本原则
面向对象编程(Object-Oriented Programming,OOP)有五大基本原则,通常被称为SOLID原则;

- 单一职责原则(Single Responsibility Principle,SRP)
一个类应该只有一个引起变化的原因,即一个类应该只负责一项工作。这意味着一个类应该只有一个责任,如果一个类有多个责任,那么在需求变化时可能需要修改多个地方,导致系统更加脆弱。
- 开放封闭原则(Open/Closed Principle,OCP)
软件实体(类、模块、函数等)应该对扩展是开放的,但对修改是封闭的。这意味着当需要添加新功能时,应该通过扩展现有代码而不是修改已有代码。
- 里氏替换原则(Liskov Substitution Principle,LSP)
子类型必须能够替换掉它们的基类型,而程序仍然能够工作。这意味着派生类必须能够替代其基类,而不引起任何错误或异常。
- 接口隔离原则(Interface Segregation Principle,ISP)
一个类不应该强迫客户端(调用它的类)依赖它们不使用的方法。接口应该小而专一,而不是大而全,这有助于减少对无关方法的依赖。
- 依赖反转原则(Dependency Inversion Principle,DIP)
高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。抽象不应该依赖于具体,具体应该依赖于抽象。这鼓励使用接口和抽象类来实现松耦合,降低模块之间的依赖性。
这五大原则共同构成了一个强大的设计理念,帮助开发者编写可维护、可扩展、灵活的面向对象代码。在实际开发中,遵循这些原则有助于构建更加健壮、可靠的软件系统。
总结
Java的面向对象编程提供了强大而灵活的设计思想,使得开发者可以更好地组织和设计代码。理解这些核心概念,并能够正确地应用于实际项目中,是成为一名熟练Java开发者(职业码农)的关键。
相关文章:
八股文-面向对象的理解
近年来,IT行业的环境相较以往显得有些严峻,因此一直以来,我都怀有一个愿望,希望能够创建一个分享面试经验的网站。由于个人有些懒惰,也较为喜欢玩乐,导致计划迟迟未能实现。然而,随着年底的临近…...
LeetCode【238】除自身意外的数组的乘积
题目: 思路: https://zhuanlan.zhihu.com/p/109306706?utm_id0 代码: int n nums.length;int[] l new int[nums.length];int[] r new int[nums.length];l[0] 1;r[n-1] 1;for (int i1;i<nums.length;i) {l[i] l[i-1] * nums[i-1]…...
c语言从入门到实战——基于指针的数组与指针数组
基于指针的数组与指针数组 前言1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 前言 指针的数组是指数组中的元素都是指针类型,它们指向某种数据类型的变量。 1. 数组名的理解 我们在使用指针…...
AUTOSAR汽车电子嵌入式编程精讲300篇-面向车载CAN网络的路由和ECU刷写方法
目录 前言 研究现状 车载CAN的“高层协议”研究现状 车载ECU刷写方法研究现状...
软考 系统架构设计师系列知识点之云计算(3)
接前一篇文章:软考 系统架构设计师系列知识点之云计算(2) 所属章节: 第11章. 未来信息综合技术 第6节. 云计算和大数据技术概述 4. 云计算的发展历程 根据云计算的定义和内涵,这里将从虚拟化技术、分布式技术和软件应…...
【万字长文】Python 日志记录器logging 百科全书 之 日志过滤
Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中,日志过滤器(Filter)用于提供更细粒度的日志控制。通过过滤器,我们可以决定哪些日志记录应该被输出,哪些应该被忽略。这对于复杂的应用…...
redis基线检查
1、禁止使用 root 用户启动 | 访问控制 描述: 使用root权限来运行网络服务存在较大的风险。Nginx和Apache都有独立的work用户,而Redis没有。例如,Redis的Crackit漏洞就是利用root用户权限替换或增加authorize_keys,从而获取root登录权限。 加固建议: 使用root切换到re…...
第五章ARM处理器的嵌入式硬件系统设计——课后习题
1ARM处理器的工作状态 ARM处理器有两种工作状态。具体而言,ARM处理器执行32位ARM指令集时,工作在ARM状态,当ARM处理器执行16位thumb指令集时候,工作在thumb状态。 1ARM指令特点 1一个大的,统一的寄存器文件。 2基于…...
Python - GFPGAN + MoviePy 提高人物视频画质
目录 一.引言 二.gif_to_png 三.gfp_gan 四.png_to_gif 五.总结 一.引言 前面我们介绍了 GFP-GAN 提高人脸质量 与 OCR 提取视频台词、字幕,前者可以提高图像质量,后者可以从视频中抽帧,于是博主便想到了将二者进行结合并优化人物 GIF …...
uniapp插件开发
安装android studio:安装目录下bin下的此文件,是用来修改分配给android studio的占用内存。 Android 11足够用。 创建新项目: 目录结构介绍: UI组件介绍:在设计程序界面时可以使用可视化拖拽的方式,没有必要…...
11 Go的作用域
概述 在上一节的内容中,我们介绍了Go的映射,包括:声明映射、初始化映射、操作映射等。在本节中,我们将介绍Go的作用域。在Go语言中,作用域是指变量的可见性范围,它定义了变量在程序中的生命周期和可访问性。…...
RabbitMQ之消息应答和持久化
文章目录 前言一、消息应答1.概念2.自动应答3.消息应答方法4.Multiple 的解释5.消息自动重新入队6.消息手动应答代码7.手动应答效果演示 二、RabbitMQ持久化1.概念2.队列如何实现持久化3.消息实现持久化4.不公平分发5.预取值 总结 前言 在RabbitMQ中,我们的消费者在…...
【分享】Excel“只读方式”的两种模式
查阅Excel表格的时候,担心不小心修改了内容,可以给Excel设置以“只读方式”打开,这样就算修改了内容也不能直接保存表格。Excel表格可以设置两种“只读方式”,一起来看看吧! “只读方式” 1: 打开Excel表…...
华为与美团达成合作,正式启动鸿蒙原生应用开发。
11月13日,华为宣布与美团以HarmonyOS为基础进行产业创新、技术应用、商业发展等方面展开全面合作,全力支持美团启动开发鸿蒙原生应用工作。 自9月25日华为宣布全新HarmonyOS NEXT蓄势待发、鸿蒙原生应用全面启动以来,已有金融、旅行、社交等…...
The 8th China Open Source Conference Successfully Concludes
由开源社主办的第八届中国开源年会(COSCon23)于 2023年10月29日在成都圆满收官。本次大会,为期两天,线下参会报名逾千人次,在线直播观看人数总计 168610 人,直播观看次数达 248725 次,官网累计浏…...
【星海出品】SDN neutron (四) 流分析
Neutron框架之流分析 1.控制端neutron-server通过wsgi接收北向REST API请求,neutron-plugin通过rpc与设备端进行南向通信。 2.设备端agent则向上通过rpc与控制端进行通信,向下则直接在本地对网络设备进行配置。 3.Neutron-agent的实现很多,彼…...
数据分析法宝,一个 SQL 语句查询多个异构数据源
随着企业数据量呈现出爆炸式增长,跨部门、跨应用、跨平台的数据交互需求越来越频繁,传统的数据查询方式已经难以满足这些需求。同时,不同数据库系统之间的数据格式、查询语言等都存在差异,直接进行跨库查询十分困难。 原生跨库查…...
解决:element ui表格表头自定义输入框单元格el-input不能输入问题
表格表头如图所示,有 40-45,45-50 数据,且以输入框形式呈现,现想修改其数据或点击右侧加号增加新数据编辑。结果不能输入,部分代码如下 <template v-if"columnData.length > 0"><el-table-colu…...
Android 透明度设置
目录 一、透明度对照表 二、透明度介绍 三、透明度设置 3.1 xml设置 3.2 代码设置 一、透明度对照表 注:00是完全透明,FF就是完全不透明 我们的UI小姐姐就喜欢给「不透明度」,这个需要自己判断一下。 完全透明:0% HEX: 00 透明度:1%…...
python语言的由来与发展历程
Python语言的由来可以追溯到1989年,由Guido van Rossum(吉多范罗苏姆)创造。在他的业余时间里,Guido van Rossum为了打发时间,决定创造一种新的编程语言。他受到了ABC语言的启发,ABC语言是一种过程式编程语…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...
【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...
CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: 问题原因: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...
