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

【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解。

【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解

在 Java 面试中,面向对象 是一个高频考点。它不仅是一种编程思想,更是现代软件开发的核心方法论。本文将从 面向对象的概念与面向过程的对比、以及 面向对象的三大特性(封装、继承、多态) 三个方面,深入探讨面向对象的核心思想。


1. 什么是面向对象?

面向对象(Object-Oriented Programming,OOP)是一种编程范式,它将现实世界中的事物抽象为 对象,并通过对象之间的交互来解决问题。与 面向过程 不同,面向对象更注重 参与者(对象) 以及它们各自的职责。

面向对象 vs 面向过程

  • 面向过程:关注问题的解决步骤和顺序,将任务拆解为一系列函数。
  • 面向对象:关注问题的参与者(对象)以及它们的行为和属性。
示例:洗衣机洗衣服
  • 面向过程

    1. 打开洗衣机
    2. 放衣服
    3. 放洗衣粉
    4. 清洗
    5. 烘干
  • 面向对象

    • :打开洗衣机、放衣服、放洗衣粉
    • 洗衣机:清洗、烘干

从上述例子可以看出:

  • 面向过程:直接高效,适合简单任务。
  • 面向对象:更易于 复用扩展维护,适合复杂系统。

2. 面向对象的三大特性

面向对象的核心思想体现在以下三大特性中:

2.1 封装(Encapsulation)

封装 是指将对象的属性和行为隐藏起来,只暴露必要的接口供外部访问。封装的意义在于:

  • 明确职责:对象的内部细节对外部透明,外部调用者无需关心内部实现。
  • 提高安全性:防止外部直接修改对象的内部状态。
示例:JavaBean 的封装
public class User {private String name;public void setName(String name) {this.name = "CSDN_" + name; // 命名规则由对象内部决定}public String getName() {return name;}
}
  • 属性私有化name 属性被声明为 private,外部无法直接访问。
  • 提供公共方法:通过 setNamegetName 方法控制对属性的访问。
实际应用:ORM 框架
  • 使用 MyBatis 操作数据库时,我们不需要关心数据库连接和 SQL 执行细节,只需调用封装好的方法即可。

2.2 继承(Inheritance)

继承 是指子类可以继承父类的属性和方法,并在此基础上进行扩展或修改。继承的意义在于:

  • 代码复用:子类可以直接使用父类的共性方法和属性。
  • 扩展功能:子类可以添加新的方法或重写父类的方法。
示例:继承与扩展
class Animal {public void eat() {System.out.println("Animal is eating");}
}class Dog extends Animal {@Overridepublic void eat() {System.out.println("Dog is eating");}public void bark() {System.out.println("Dog is barking");}
}
  • 复用Dog 类继承了 Animaleat 方法。
  • 扩展Dog 类新增了 bark 方法,并重写了 eat 方法。

2.3 多态(Polymorphism)

多态 是指同一个方法调用,由于对象所属的类不同,实际执行的逻辑也不同。多态的意义在于:

  • 提高灵活性:同一接口可以有不同的实现。
  • 降低耦合:调用者无需关心具体实现,只需关注接口。
示例:多态的实现
Animal animal = new Dog(); // 父类引用指向子类对象
animal.eat(); // 输出:Dog is eating
  • 父类引用指向子类对象Animal 类型的变量指向 Dog 对象。
  • 方法调用:调用 eat 方法时,实际执行的是 Dog 类的 eat 方法。
注意事项
  • 多态只能调用父类中定义的方法,无法调用子类特有的方法(如 bark)。

3. 总结

面向对象是一种强大的编程思想,它将现实世界中的事物抽象为对象,并通过 封装继承多态 三大特性,提高了代码的 复用性扩展性维护性

相关文章:

【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解。

【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解 在 Java 面试中,面向对象 是一个高频考点。它不仅是一种编程思想,更是现代软件开发的核心方法论。本文将从 面向对象的概念、与面向过程的对比、以及 面向对象的三大特性(封…...

解锁责任链模式:Java 实战与应用探秘

系列文章目录 后续补充~~~ 文章目录 一、责任链模式基础入门1.1 责任链模式的定义1.2 核心角色剖析1.2.1 抽象处理者(Handler)1.2.2 具体处理者(ConcreteHandler)1.2.3 客户端(Client) 1.3 类图结构展示 二…...

华为 Open Gauss 数据库在 Spring Boot 中使用 Flyway

db-migration:Flyway、Liquibase 扩展支持达梦(DM)、南大通用(GBase 8s)、OpenGauss 等国产数据库。部分数据库直接支持 Flowable 工作流。 开源代码仓库 Github:https://github.com/mengweijin/db-migrat…...

汽车电子电控软件开发中因复杂度提升导致的架构恶化问题

针对汽车电子电控软件开发中因复杂度提升导致的架构恶化问题,建议从以下方向进行架构优化和开发流程升级,以提升灵活性、可维护性和扩展性: 一、架构设计与模块化优化 分层架构与模块解耦 采用AUTOSAR标准的分层架构(应用层、运行…...

VMware Ubuntu 共享目录

在VMware中挂载Ubuntu共享目录需要以下步骤,分为设置共享文件夹和在Ubuntu中挂载两部分: 一、VMware 设置共享文件夹 关闭Ubuntu虚拟机 在配置前,建议先关闭虚拟机(若已运行需关闭,部分VMware版本支持热添加&#xff0…...

Linux安装jdk,node,mysql,redis

准备工作: 1.安装VMware软件,下载CentOs7镜像文件,在VMware安装CentOs7 2.宿主机安装Xshell用来操作linux 3. .宿主机安装Xftp用来在宿主机和虚拟机的linux传输文件 案例1:在 /home/soft文件夹解压缩jdk17,并配置环…...

Excel工作圈小工具一个集合了大量Excel功能的绿色工具软件

​Excel工作圈小工具 一个集合了大量Excel功能的绿色工具软件,可以大大加强生产效率~ 软件虽然看起来比较简陋,但功能却是十分丰富。无需联网即可运行,而且兼容WPS和MS office各版本。 以下是软件的功能详细截图。 总的来说功能挺丰富&#…...

DeepSeek实操教程(清华、北大)

文末清华大学及北京大学DeepSeek下载地址 1. 地址 2. 提示词 模板:我要(做)xxx,要给xxx用,希望达到xxx效果,但担心xxx问题 3. 软件联动 基本原则:Deepseek生成内容,以其它软件…...

模拟退火算法浅尝

简介 其是模拟物理退火过程而演升出的算法,物理退火过程包含加温过程,等温过程,冷却过程。 模拟退火(SA) 初始设定为高温状态,看作是在解空间进行广域搜,处于低温状态时,看作是在解空间中作局部领域搜索…...

React:B站评论demo,实现列表渲染、删除按钮显示和功能实现、导航栏渲染切换及高亮显示、评论区的排序

功能要求: 1、渲染评论列表 2、删除评论功能:只显示自己评论的删除按钮;点击删除按钮,删除当前评论,列表中不再显示。 3、渲染导航Tab(最新 | 最热)和其 高亮实现 4、评论排序功能实现&…...

支持IPD项目管理的9大系统,哪款工具能有效提高项目控制能力

本文介绍了以下9大系统: 1.Worktile; 2. 腾讯敏捷开发平台(TAPD); 3. 简道云(Jiandaoyun); 4. 蓝鲸智云(BlueWhale); 5. 轻流(Qingflow&#xff0…...

4070Super安装GPU版本pytorch记录

一些啐啐念。 安装LLaMA-Factory时遇到pytorch安装成CPU版本。网上找了一圈攻略,都是下载龟速。挂梯子也一样。最后在尝试用pytorch官网的生成的命令进行安装时,突然奇想,直接把安装日志显示的下载链接复制到浏览器下载,发现可以满…...

SpringBoot 端口配置

在Spring Boot中,配置应用程序的监听端口有多种方式。以下是常见的几种方法: 1. 通过 application.properties 或 application.yml 文件配置 application.properties server.port8081application.yml server:port: 8081如果没有显式配置 server.port…...

Linux网络相关概念和重要知识(1)(网络协议、网络通信)

目录 1.网络协议 (1)网络的起源 (2)为什么需要协议 (3)协议分层及其设计的解耦 (4)OSI定义的七层网络模型 ①分层及其功能 ②TCP/IP协议 ③传输层协议(TCP和UDP&a…...

go前后端开源项目go-admin,本地启动

https://github.com/go-admin-team/go-admin 教程 1.拉取项目 git clone https://github.com/go-admin-team/go-admin.git 2.更新整理依赖 go mod tidy会整理依赖,下载缺少的包,移除不用的,并更新go.sum。 # 更新整理依赖 go mod tidy 3.编…...

爬虫系列之发送请求与响应《一》

一、请求组成 1.1 请求方式:GET和POST请求 GET:从服务器获取,请求参数直接附在URL之后,便于查看和分享,常用于获取数据和查询操作 POST:用于向服务器提交数据,其参数不会显示在URL中,而是包含在…...

【数据挖掘】Matplotlib

Matplotlib 是 Python 最常用的 数据可视化 库之一,在数据挖掘过程中,主要用于 数据探索 (EDA)、趋势分析、模式识别 和 结果展示。 📌 1. Matplotlib 基础 1.1 安装 & 导入 # 如果未安装 Matplotlib,请先安装 # pip instal…...

AtCoder Beginner Contest 001(A - 積雪深差、B - 視程の通報、C - 風力観測、D - 感雨時刻の整理)题目翻译

由于我发现网上很少有人会发很久之前AtCoder Beginner Contes的题,所以我打算从AtCoder Beginner Contest 001开始写。大约两周一更,需要的可以订阅专栏,感谢支持Thanks♪(・ω・)ノ →题目讲解 A - 積雪深差 …...

安全测试之五:SQL Server注入漏洞几个实例

示例 1:在 GET 请求中测试 SQL 注入 最简单且有时最有效的情况是针对登录页面进行测试。当登录页面请求用户输入用户名和密码时,攻击者可以尝试输入以下字符串 “ or 11”(不包含双引号): https://vulnerable.web.ap…...

如何在Github上面上传本地文件夹

前言 直接在GitHub网址上面上传文件夹是不行的,需要一层一层创建然后上传,而且文件的大小也有限制,使用Git进行上传更加方便和实用 1.下载和安装Git Git - Downloads 傻瓜式安装即可 2.获取密钥对 打开自己的Github,创建SSH密钥&…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...