当前位置: 首页 > 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密钥&…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...