八股文-面向对象的理解

近年来,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开发者(职业码农)的关键。

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

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

相关文章

智慧城市项目建设介绍

1. 项目建设背景 随着城市化进程的加速,城市发展面临着诸多挑战,如环境污染、城镇综合管理、经济发展布局等。为了应对这些挑战,智慧城市应运而生,成为城市发展的重要方向。智慧城市通过运用信息技术和智能化技术,实…

Qt UDP通信

UDP通信中单个套接字既是服务器又是客户端。 创建UDP套接字: QUdpSocket *udpSocket; udpSocketnew QUdpSocket(this); 绑定本地端口作为服务端口: udpSocket->bind(port)解除绑定udpSocket->abort(); 向指定ip和端口的主机发送数据报&#…

mmdetection安装与训练

一、什么是mmdetection 商汤科技(2018 COCO 目标检测挑战赛冠军)和香港中文大学最近开源了一个基于Pytorch实现的深度学习目标检测工具箱mmdetection,支持Faster-RCNN,Mask-RCNN,Fast-RCNN等主流的目标检测框架&#…

Linux 图形界面配置RAID

目录 RAID 1 配置 RAID 5配置 , RAID 配置起来要比 LVM 方便,因为它不像 LVM 那样分了物理卷、卷组和逻辑卷三层,而且每层都需要配置。我们在图形安装界面中配置 RAID 1和 RAID 5,先来看看 RAID 1 的配置方法。 RAID 1 配置 配置 RAID 1…

力扣学习笔记——283. 移动零

力扣学习笔记——283. 移动零 题目描述 https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 &a…

Java架构师分布式搜索词库解决方案

目录 1 IK分词器字典热加载实现思路2 分析IK分词器的配置3 基于MySQL更新字典的实现4 常见报错4.1 java.lang.ExceptionInInitializerError: null …access denied (“java.lang.RuntimePermission” “setContextClassLoader”)4.2 java.sql.SQLNonTransientConnectionExcepti…

OpenGL的学习之路-3

前面1、2介绍的都是glut编程 下面就进行opengl正是部分啦。 1.绘制点 #include <iostream> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h>void myMainWinDraw();int main(int argc,char** argv) {glutInit(&argc,argv);glutIni…

windows构建ROS2 Android App

windows构建ROS2 Android App 升级到ROS2之后,由于架构的不同,导致ROS1的Android App已经无法使用了,所以我们需要通过ROS2 java构建出Android的依赖库 环境要求 window10以上wsl(我用的是WSL构建的,你也可以用linux虚拟机)docker(安装的时候选择WSL)Ubuntu 18.04以上…

基于谐波参数空间的卷积神经网络自动三维牙齿分割

论文连接&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1524070320300151 机构&#xff1a; a英国卡迪夫大学计算机科学与信息学院 b中国科学院大学北京 c中国科学院计算技术研究所北京 d深圳大数据研究院&#xff0c;深圳518172 代码链接&#x…

本机IP地址查询指令详解

本机IP地址是指在局域网内的计算机的私有IP地址&#xff0c;它是连接网络的基础。了解本机IP地址与相关指令的使用方法&#xff0c;在网络维护以及安全等方面都具有重要的意义。 一、查看本机IP地址 不同的操作系统使用不同的指令来查看本机IP地址。以下是一些常用操作系统的指…

Window MongoDB安装

三种NOSQL的一种,Redis MongoDB ES 应用场景: 1.社交场景:使用Mongodb存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能 2.游戏场景:使用Mongodb存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问…

保姆级vue-pdf的使用过程

第一步 引入vue-pdf npm install --save vue-pdf 第二步 按照需求我们慢慢进行 01.给你一个pdf文件的url&#xff0c;需要在页面渲染 代码 <template><div><pdfref"pdf":src"url"></pdf></div> </template> <…

灰度图处理方法

做深度学习项目图像处理的时候常常涉及到灰度图处理&#xff0c;这里对自己处理灰度图的方式做一个记录&#xff0c;后续有更新的话会在此更新 一&#xff0c;多维数组可视化 将多维数组可视化为灰度图 img_gray Image.fromarray(img, modeL) # 实现array到image的转换,m…

大数据-之LibrA数据库系统告警处理(ALM-12043 DNS解析时长超过阈值)

告警解释 系统每30秒周期性检测DNS解析时长&#xff0c;并把DNS解析时长和阈值&#xff08;系统默认阈值20000ms&#xff09;进行比较&#xff0c;当检测到DNS解析时长连续多次&#xff08;默认值为2&#xff09;超过阈值时产生该告警。 用户可通过“系统设置 > 阈值配置 …

深度学习 机器视觉 车位识别车道线检测 - python opencv 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

openEuler安全配置规范基线

# openEuler安全配置规范基线 ## 概述 安全配置规范基线是对系统配置项的推荐安全配置的集合&#xff0c;包含一系列的配置要求或建议&#xff0c;各配置项之间相互独立或存在一定的关联关系。基于安全配置规范基线指导修改系统配置&#xff0c;可以显著提升系统的整体安全防护…

Python算法——树的重建

Python中的树的重建算法详解 树的重建&#xff08;Tree Reconstruction&#xff09;是一种从给定的遍历序列中恢复原树结构的算法。在本文中&#xff0c;我们将讨论树的重建问题以及常见的重建算法&#xff0c;包括先序遍历和中序遍历序列重建二叉树&#xff0c;以及层序遍历序…

使用 Electron 来替代本地调试线上代理的场景

Cookie Samesite 问题 https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure?hlzh-cnhttps://www.chromium.org/updates/same-site/https://github.com/GoogleChromeLabs/samesite-exampleshttps://releases.electronjs.org/releases/s…

python3中split()函数和int()函数的坑

&#xff08;一&#xff09; python3中的split()函数如果传入一个空字符&#xff0c;就会返回一个列表&#xff0c;该列表中有一个元素&#xff0c;此元素为空字符串。见如下代码&#xff0c; a "".split(",") for i,x in enumerate(a):print(f"i{i…

如何使用 docker 在本地部署 vite 项目

如何使用 docker 在本地部署 vite 项目 创建 Dockerfile 文件创建.dockerignore 文件构建镜像运行容器 1. 创建 Dockerfile 文件 # 使用官方的 Node 镜像作为基础镜像 FROM node:16.15.1# 设置工作目录 WORKDIR /usr/src/app# 将本地的 Vite 项目文件复制到工作目录 COPY . …