当前位置: 首页 > news >正文

八股文-面向对象的理解

近年来,IT行业的环境相较以往显得有些严峻,因此一直以来,我都怀有一个愿望,希望能够创建一个分享面试经验的网站。由于个人有些懒惰,也较为喜欢玩乐,导致计划迟迟未能实现。然而,随着年底的临近,考虑到当前环境下许多开发者可能面临裁员等问题,我决定加速建设这个面试经验分享网站,以便为大家提供学习的平台,共同面对职场的挑战。

当然,我们建设这个网站的目标并非仅仅是为了背诵一些标准答案,而是以面试八股文为切入点,拓展我们的知识广度,构建起一个独特的知识体系。通过这个过程,我们希望能够在职业发展的道路上更为深入地理解行业趋势,形成自己独到的见解,在内卷的道路上越走越卷。

网站地址:http://blog.xiuji.mynatapp.cc/

那么作为一名java开发者,我们还是以面向对象来开启我们的知识分享吧。

oop.jpg

面向对象的理解

面向对象编程(Object-Oriented Programming,OOP)是一种程序设计方法,其核心思想是将问题抽象为由若干个对象,通过这些对象之间的调用、配合及协调,共同完成当前的问题。

面向对象的三大基本特征:封装、继承和多态。

面向对象的五大基本原则:单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖反转原则。

面向对象的三大基本特性

面向对象编程(Object-Oriented Programming,OOP)有三大基本特征,它们是封装(Encapsulation)、继承(Inheritance)、和多态(Polymorphism);

-2023-11-04-2144.png

  • 封装

封装是面向对象编程的基本原则之一,它指的是将数据和操作数据的方法封装在一个单元内,即一个类中。封装通过访问控制修饰符(如private、protected、public)来限制对类的成员的访问。这种封装性能够隐藏对象的内部实现细节,只暴露必要的接口,提高了代码的安全性和可维护性。

  • 继承

继承是一种机制,允许一个类(子类)基于另一个类(父类)的定义来构建。子类继承了父类的属性和方法,同时可以通过扩展或修改来增加或改变其行为。继承促进了代码的重用,通过建立类的层次结构,提高了代码的可维护性和扩展性。

  • 多态

多态性是指同一个方法在不同的对象上产生不同的行为。在面向对象编程中,多态性有两种主要形式:编译时多态(静态多态)和运行时多态(动态多态)。

编译时多态: 通过方法的重载实现,同一个类中的多个方法拥有相同的名称但不同的参数列表。

运行时多态: 通过方法的覆盖实现,子类可以提供对父类方法的不同实现。

这三大特征共同构成了面向对象编程的基本框架,使得代码更易理解、扩展和维护。

面向对象的五大基本原则

面向对象编程(Object-Oriented Programming,OOP)有五大基本原则,通常被称为SOLID原则;

-2023-11-04-2145.png

  • 单一职责原则(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】除自身意外的数组的乘积

题目&#xff1a; 思路&#xff1a; https://zhuanlan.zhihu.com/p/109306706?utm_id0 代码&#xff1a; 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. 指针数组模拟二维数组 前言 指针的数组是指数组中的元素都是指针类型&#xff0c;它们指向某种数据类型的变量。 1. 数组名的理解 我们在使用指针…...

AUTOSAR汽车电子嵌入式编程精讲300篇-面向车载CAN网络的路由和ECU刷写方法

目录 前言 研究现状 车载CAN的“高层协议”研究现状 车载ECU刷写方法研究现状...

软考 系统架构设计师系列知识点之云计算(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之云计算&#xff08;2&#xff09; 所属章节&#xff1a; 第11章. 未来信息综合技术 第6节. 云计算和大数据技术概述 4. 云计算的发展历程 根据云计算的定义和内涵&#xff0c;这里将从虚拟化技术、分布式技术和软件应…...

【万字长文】Python 日志记录器logging 百科全书 之 日志过滤

Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中&#xff0c;日志过滤器&#xff08;Filter&#xff09;用于提供更细粒度的日志控制。通过过滤器&#xff0c;我们可以决定哪些日志记录应该被输出&#xff0c;哪些应该被忽略。这对于复杂的应用…...

redis基线检查

1、禁止使用 root 用户启动 | 访问控制 描述: 使用root权限来运行网络服务存在较大的风险。Nginx和Apache都有独立的work用户,而Redis没有。例如,Redis的Crackit漏洞就是利用root用户权限替换或增加authorize_keys,从而获取root登录权限。 加固建议: 使用root切换到re…...

第五章ARM处理器的嵌入式硬件系统设计——课后习题

1ARM处理器的工作状态 ARM处理器有两种工作状态。具体而言&#xff0c;ARM处理器执行32位ARM指令集时&#xff0c;工作在ARM状态&#xff0c;当ARM处理器执行16位thumb指令集时候&#xff0c;工作在thumb状态。 1ARM指令特点 1一个大的&#xff0c;统一的寄存器文件。 2基于…...

Python - GFPGAN + MoviePy 提高人物视频画质

目录 一.引言 二.gif_to_png 三.gfp_gan 四.png_to_gif 五.总结 一.引言 前面我们介绍了 GFP-GAN 提高人脸质量 与 OCR 提取视频台词、字幕&#xff0c;前者可以提高图像质量&#xff0c;后者可以从视频中抽帧&#xff0c;于是博主便想到了将二者进行结合并优化人物 GIF …...

uniapp插件开发

安装android studio&#xff1a;安装目录下bin下的此文件&#xff0c;是用来修改分配给android studio的占用内存。 Android 11足够用。 创建新项目&#xff1a; 目录结构介绍&#xff1a; UI组件介绍&#xff1a;在设计程序界面时可以使用可视化拖拽的方式&#xff0c;没有必要…...

11 Go的作用域

概述 在上一节的内容中&#xff0c;我们介绍了Go的映射&#xff0c;包括&#xff1a;声明映射、初始化映射、操作映射等。在本节中&#xff0c;我们将介绍Go的作用域。在Go语言中&#xff0c;作用域是指变量的可见性范围&#xff0c;它定义了变量在程序中的生命周期和可访问性。…...

RabbitMQ之消息应答和持久化

文章目录 前言一、消息应答1.概念2.自动应答3.消息应答方法4.Multiple 的解释5.消息自动重新入队6.消息手动应答代码7.手动应答效果演示 二、RabbitMQ持久化1.概念2.队列如何实现持久化3.消息实现持久化4.不公平分发5.预取值 总结 前言 在RabbitMQ中&#xff0c;我们的消费者在…...

【分享】Excel“只读方式”的两种模式

查阅Excel表格的时候&#xff0c;担心不小心修改了内容&#xff0c;可以给Excel设置以“只读方式”打开&#xff0c;这样就算修改了内容也不能直接保存表格。Excel表格可以设置两种“只读方式”&#xff0c;一起来看看吧&#xff01; “只读方式” 1&#xff1a; 打开Excel表…...

华为与美团达成合作,正式启动鸿蒙原生应用开发。

11月13日&#xff0c;华为宣布与美团以HarmonyOS为基础进行产业创新、技术应用、商业发展等方面展开全面合作&#xff0c;全力支持美团启动开发鸿蒙原生应用工作。 自9月25日华为宣布全新HarmonyOS NEXT蓄势待发、鸿蒙原生应用全面启动以来&#xff0c;已有金融、旅行、社交等…...

The 8th China Open Source Conference Successfully Concludes

由开源社主办的第八届中国开源年会&#xff08;COSCon23&#xff09;于 2023年10月29日在成都圆满收官。本次大会&#xff0c;为期两天&#xff0c;线下参会报名逾千人次&#xff0c;在线直播观看人数总计 168610 人&#xff0c;直播观看次数达 248725 次&#xff0c;官网累计浏…...

【星海出品】SDN neutron (四) 流分析

Neutron框架之流分析 1.控制端neutron-server通过wsgi接收北向REST API请求&#xff0c;neutron-plugin通过rpc与设备端进行南向通信。 2.设备端agent则向上通过rpc与控制端进行通信&#xff0c;向下则直接在本地对网络设备进行配置。 3.Neutron-agent的实现很多&#xff0c;彼…...

数据分析法宝,一个 SQL 语句查询多个异构数据源

随着企业数据量呈现出爆炸式增长&#xff0c;跨部门、跨应用、跨平台的数据交互需求越来越频繁&#xff0c;传统的数据查询方式已经难以满足这些需求。同时&#xff0c;不同数据库系统之间的数据格式、查询语言等都存在差异&#xff0c;直接进行跨库查询十分困难。 原生跨库查…...

解决:element ui表格表头自定义输入框单元格el-input不能输入问题

表格表头如图所示&#xff0c;有 40-45&#xff0c;45-50 数据&#xff0c;且以输入框形式呈现&#xff0c;现想修改其数据或点击右侧加号增加新数据编辑。结果不能输入&#xff0c;部分代码如下 <template v-if"columnData.length > 0"><el-table-colu…...

Android 透明度设置

目录 一、透明度对照表 二、透明度介绍 三、透明度设置 3.1 xml设置 3.2 代码设置 一、透明度对照表 注&#xff1a;00是完全透明&#xff0c;FF就是完全不透明 我们的UI小姐姐就喜欢给「不透明度」&#xff0c;这个需要自己判断一下。 完全透明:0% HEX: 00 透明度:1%…...

python语言的由来与发展历程

Python语言的由来可以追溯到1989年&#xff0c;由Guido van Rossum&#xff08;吉多范罗苏姆&#xff09;创造。在他的业余时间里&#xff0c;Guido van Rossum为了打发时间&#xff0c;决定创造一种新的编程语言。他受到了ABC语言的启发&#xff0c;ABC语言是一种过程式编程语…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...