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

Java基础知识 | 常见面试题(中):面向对象基础

撰写成一问一答的形式,每次回答都默写,对比参考答案后,再默写出更恰当的答案。

 相关内容

Java基础知识 | 常见面试题(上):基础概念和常识

Java基础知识 | 常见面试题(上):基本语法

Java基础知识 | 常见面试题(上):基本数据类型

自测篇

1.1 面向对象和面向过程的区别
1.2 创建一个对象用什么运算符?对象实体与对象引用有何不同?
1.3 对象的相等和引用相等的区别
1.4 类的构造方法的作用是什么?
1.5 如果一个类没有声明构造方法,该程序能正确执行吗?
1.6 构造方法有哪些特点?是否可被 override?
1.7 面向对象三大特征
1.8 接口和抽象类有什么共同点和区别?
1.9 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

答案篇

1.面向对象和面向过程的区别

两者解决问题的方式不同:

面向对象是根据问题先抽象出涉及到的对象,再基于对象去分配任务去实现解决问题。

  • 将事务封装到对象中实现,之后再增加事务只需要创建对象即可。

面向过程则是将问题拆解成几个子问题再依次实现。

举个生活中的例子,餐馆的场景:

面向对象的方式则是创建厨师、服务员和顾客三个对象则能够实现这个场景;

面向过程则是创建顾客进门→服务员拿菜单介绍→顾客点菜下单→厨师做菜→服务员上菜→顾客结账

面向过程则是能够流程化,而面向对象更符合我们的思维思考;

2.创建一个对象用什么运算符?对象实体与对象引用有何不同?

创建对象使用new运算符,创建新的对象实例,并将新的对象引用指向该实例。

对象引用是什么?

  • 对象引用即指向堆内存中实际对象的地址,存储在栈当中。

  • 对象实体即对象的信息和内容,存储在堆当中。

  • 对象实体和对象引用像是绳子与气球,一个对象引用只能指向一个对象实体,而可以有很多个对象引用指向同一个对象实体。

3.对象的相等和引用相等的区别

引用相同通过查看地址是否相同,而对象相等判断的是其内存存放的值和属性是否相同。

4.类的构造方法的作用是什么?

类的构造方法便于在调用对象时直接赋值初始化,其中无参构造器能够保证即使无赋值初始化也不会报错;

5.如果一个类没有声明构造方法,该程序能正确执行吗?

能正常运行,因为在Java机制中当没有创建构造器时,其会默认创建无参构造器;

若创建构造器后,则必须创建无参构造成;

因为在创建引用类型时,new对象后加上的()调用的就是无参构造器,不创建很容易报错。

6.构造方法有哪些特点?是否可被 override?

构造方法方法名与类相同,无返回类型和返回值;

能够撰写参数列表,重载:创建多个构造方法必须参数列表不同,不能被override覆盖/重写;

但能够直接调用在创建对象时自动执行相应构造器方法,无需调用;

7.面向对象三大特征

面向对象三大特征为封装、继承和多态;

封装

  • 能够将常用的方法构建好后便于下次使用时直接调用相应的包即可;

  • 封装相当于黑盒,但同时必须提供相应的访问方法。

    • 每个类相对于一个对象,将该对象需要解决的功能实现封装,并且提供外部相应访问的方法。

    • 防止外部直接方法内部信息,同时必须提供给外部能够访问的途径,因为类的创建就是为了便于使用。

    • 就像使用电脑,我们无需知道里面的集成电路如何构建,只需要会使用键盘和鼠标即可操作计算机;

继承:代码复用性和可维护性

  • 在已经封装好的类的实现功能上再完善or增加相应的功能。

  • 但需要注意的是继承的是父类全部的方法;

  • 注意事项

    • 子类只是拥有父类的方法,即对于父类的私有方法只能访问而不能再其基础上修改。

    • 子类能够继承父类方法并拓展自己方法;

    • 子类可以用自己的方式实现父类的方法(不懂后期待补)。

多态:

  • 同种方法根据调用的对象不同而产生不同的结果,使用父类创建对象,使用父类的引用来引用子类的对象。

  • 对象类型和引用类型间必须是继承关系;

  • 只能够调用“父类和子类”都存在的方法;在运行时才能确定调用的是哪个类的方法;

  • 当子类覆盖父类方法时,则调用的是指向子类对象的方法,若该子类未覆盖父类方法,则调用的是父类的方法

8.接口和抽象类有什么共同点和区别?

接口出现的目的是为了定义规范,必须实现某些功能才能被认为符合某类范式。

抽象类则是为了将具象化事物抽象出来,便于按照指定特征去实现,就像动物抽象类,狗和猫都能实现其基础功能,并且在该基础上实现其各自特点,相当于是参考模板。

接口和抽象类的共同点:

  • 继承子类必须实现其所有方法;

  • 且接口和抽象类都不能实例化;

接口

抽象类

子类必须实现

子类必须实现

继承机制不同

能够多接口

只能继承一个抽象类

对类进行约束,实现相应行为

目的是复用,关注所属关系

语法不同

Inference

Abstract

修饰符要求不同

public、static或final修饰

默认为default

不能被修改,且必须有初始值

可被重新定义or重新赋值。

9.深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

浅拷贝只是创建新的对象引用到相同对象实体中,而深拷贝则是将对象实体(信息和内容)和对象引用都复制一遍

引用拷贝则是直接引用对象,与原对象共用对象引用和对象实体;

  • 浅拷贝的对象与原对象不同,但调用的内容是相同共用的;

问题和理解大部分来源为Guide哥的Java面试指南,有需要的可自行检索加入其星球获得。 

相关文章:

Java基础知识 | 常见面试题(中):面向对象基础

撰写成一问一答的形式,每次回答都默写,对比参考答案后,再默写出更恰当的答案。 相关内容 Java基础知识 | 常见面试题(上):基础概念和常识 Java基础知识 | 常见面试题(上)&#xff1a…...

勒索软件正在从 Windows 转向 Linux

听说勒索软件正在从 Windows 转向 Linux了勒索软件正在从 Windows 转向 Linux 最近几周,黑客们一直在对 Linux 企业网络部署 IceFire 勒索软件,这是一个值得注意的转变,因为它曾经是一个只针对 Windows 的恶意软件。与 Windows 相比&#xf…...

信息系统项目管理师 第11章 项目成本管理

1.管理基础 1.重要性和意义 项目管理主要受范围、时间、成本、质量的约束,项目成本管理就是要确保在批准的预算内完成项目。 如果项目建设的实际成本远远超出批准的投资预算,就很容易造成成本失控。 1.对工程项目认识不足。 2.组织制度不健全。 3.方法问题 4.技术的制约 5.需…...

XML 简介

文章目录一、XML 简介二、XML 用途总结一、XML 简介 XML 被设计用来传输和存储数据。 HTML 被设计用来显示数据。 XML 指可扩展标记语言(eXtensible Markup Language)。 可扩展标记语言(英语:Extensible Markup Language&#xf…...

ERP:华为杀入,金蝶们打颤?

配图来自Canva可画 近期,华为官方透露将在4月份推出自研MetaERP管理系统,引来不少媒体和业内人士的围观,紧接着关于华为“进军ERP市场”的解读更是不胫而走,所谓一石激起千层浪,此说法一出,直接导致了金蝶…...

Linux——总复习1

1.要注意自己处于当前那个目录位置。 2.将file1的前五行/后三行重定向、附加到file2【输出重定向】 head -5 file1 > file2 tail -3 file1 >> file2 3.ls与cat区别 ls:列出目录的目录内容,未指定目录,则列出当前工作目录的内容 -l:查…...

控制SQL*PLUS的环境和数据字典简介

可以通过使用SET命令来设置SQL*PLUS的环境变量,从而达到控制SQL*PLUS 环境的目的。 SET命令的格式如下: SET 环境变量 变量的值 可以通过使用SHOW命令来显示SQL*PLUS环境变量的配置。SHOW 命令的格式如下: SHOW 环境变量|ALL 下面用一个…...

Chapter11.3:MATLAB_SIMULINK在离散系统中的应用

该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接:https://blog.csdn.net/qq_39032096/category_10287468…...

过滤器Filter

什么是Filter? Filter表示过滤器,是JavaWeb三大组件(Servlet、FIlter、Listener)之一。过滤器可以把对资源的请求拦截下来,总而实现一些特殊的功能 使用过滤器后,要想访问web服务器上的资源,必须…...

MySQL数据同步ES的常用思路和方法

文章目录 1.同步双写2.异步双写3.定时任务4.数据订阅大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实现呢?搜索引擎Elasticsearch。 那么问题来了,商品上架,数据一般写入到MySQL的数据库中,那么用于检索的数据又是怎么同步到Elasticsearch的呢? 1.同步双…...

spring源码之扫描前设置

扫描前设置 &#x1f6f9;源码源码说明总结启动一个springboot项目源码 org.springframework.context.annotation.ComponentScanAnnotationParser#parse public Set<BeanDefinitionHolder> parse(AnnotationAttributes componentScan, String declaringClass) {// 创建C…...

C++ 98/03 应该学习哪些知识19

迭代器、空间配置器理解 在 C 中&#xff0c;迭代器是一种可以用来遍历容器中的元素的对象。它们提供了一个类似于指针的接口&#xff0c;允许我们访问容器中的元素&#xff0c;而不必了解容器内部的结构。迭代器是 STL&#xff08;标准模板库&#xff09;的核心部分&#xff0…...

java毕业生就业信息管理系统servlet程序

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…...

linux命令-netstat

linux命令-netstat 查看Linux中网络系统状态信息 补充说明 netstat命令 用来打印Linux中网络系统的状态信息&#xff0c;可让你得知整个Linux系统的网络情况。 语法 netstat(选项)选项 -a或--all&#xff1a;显示所有连线中的Socket&#xff1b; -A<网络类型>或--&…...

微服务+springcloud+springcloud alibaba学习笔记【Rest微服务工程搭建】(2/9)

Rest微服务工程搭建---学习笔记2/91、简单架构示意图2、创建Cloud-provider-payment8001 微服务提供者Module模块2.1. 建Module2.2. 改pom2.3. 写yml2.4. 主启动2.5. 业务类3、创建Cloud-consumer-order80 微服务消费者订单Module模块3.1. 建Module3.2. 改pom3.3. 写yml3.4. 主…...

【Redis7】Redis7 十大数据类型

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Redis7 十大数据类型。 后续会继续分享Redis7和其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一篇文章&#xff1a;《【Redis7】Redis7概述、安装…...

java 死锁怎么解决, 盘它

死锁归根结底还是资源的安排有问题如何使用 jps jstack,解决死锁如果是在分布式的系统中, 我该如何一步一步找到对应的堆栈解决死锁问题呢如何利用 skywalking 帮我解决死锁大多数人一辈子只做了三件事&#xff0c;自欺欺人被人欺 如何使用 jps jstack,解决死锁 jps和jstack都…...

【新2023Q2押题JAVA】华为OD机试 - 服务依赖

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:服务依赖 题目 在某系统中有…...

交友项目【通用设置】三个功能实现

目录 1&#xff1a;交友项目【通用设置】 1.1&#xff1a;查询通用设置 1.1.1&#xff1a;接口地址 1.1.2&#xff1a;流程分析 1.1.3&#xff1a;代码实现 1.2&#xff1a;设置陌生人问题 1.2.1&#xff1a;接口地址 1.2.2&#xff1a;流程分析 1.2.3&#xff1a;代码…...

MongoDB 更新文档(更新多条文档)

上一篇我们介绍了如何更新一条文档&#xff0c;本篇我们介绍一下&#xff0c;如果更新多条文档&#xff0c;我们来回顾一下更新多条文档的语法&#xff1a; db.collection.updateMany(filter, update, options) 上一篇我们对语法中的参数及参数的语法进行了详细的介绍&#xf…...

ubuntu20 qt6.4.3 ustc镜像安装 xdma

文件下载地质 命令 ./qt-unified-linux-x64-4.5.2-online.run --mirror https://mirrors.ustc.edu.cn/qtproject没有镜像就下砸错误hash verification while downloading,this is temporary error,please retry 部分安装器不支持 --mirror cd ~/workspace/dma_ip_drivers/X…...

15_I.MX6ULL_LCD显示原理

目录 LCD简介 分辨率 像素格式 LCD屏幕接口 LCD时间参数 RGB LCD屏幕时序 像素时钟 显存 LCD简介 LCD全称是Liquid Crystal Display,也就是液晶显示器,是现在最常用到的显示器,手机、电脑、各种人机交互设备等基本都用到了LCD,最常见就是手机和电脑显示器了。LCD的构造…...

Vue.js 2.0 实例

构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的&#xff1a; var vm new Vue({// 选项 }) 虽然没有完全遵循 MVVM 模式&#xff0c; Vue 的设计无疑受到了它的启发。因此在文档中经常会使用 vm 这个变量名表示 Vue 实例。 在实例化 Vue 时&…...

安全技术和iptables防火墙

目录安全技术Netfilter防火墙工具介绍iptablesfirewalldnftablesiptables的组成概述netfilter与iptables关系iptables的四表五链结构介绍iptables安装iptables的命令格式数据包的常见控制类型iptables 命令常用管理选项添加规则删除规则修改规则 &#xff08;不推荐使用&#x…...

StringBuilder和StringBuffer的区别

StringBuilder和StringBuffer的用法是一致的&#xff0c;平常我们最多用到的方法就是append()拼接字符串和reverse()翻转字符串等等。二者看起来方法是一样的&#xff0c;确实也是这样&#xff0c;其实它俩唯一的不同在于StringBuilder不是线程安全的&#xff0c;而StringBuffe…...

美团大数据开发转正实习面经(已OC)

一面面试体验整体很不错&#xff0c;面试官很温柔&#xff0c;也不会故意为难你。 一面(2023.3.21) 自我介绍简单介绍项目(研一在国电做的)你认为学习到的技术和实际使用的差距在哪项目中的数据都是哪里来的(集团中各种设备运行的数据)你说你用到了Spark那你介绍一下Spark的组件…...

leedcode刷题(2)

各位朋友们&#xff0c;又是新的一天&#xff0c;不知道大家过得怎样&#xff1f;今天是我leedcode刷题系列的第二篇&#xff0c;那么废话不多说&#xff0c;直接进入我们今天的主题。 文章目录有效的括号题目要求用例输入做题思路代码实现环形链表题目要求用例输入做题思路代码…...

0119 磁盘分区、挂载

1.Linux分区 1.Linux无论有几个分区&#xff0c;分给哪个目录使用&#xff0c;归根结底只有一个根目录&#xff0c;一个独立且唯一的文件结构&#xff0c;Linux中每个分区都是用来组成整个文件系统的一部分 2.Linux采用了一种叫“载入”的处理方法&#xff0c;它的整个文件系…...

【独家】华为OD机试 - 打折买水果(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本期题目:打折买水果 题目 有 m m m…...

python使用args,kwargs

使用*args, **kwargs 在Python中&#xff0c;*args和**kwargs分别用于在函数定义中处理可变数量的位置参数和关键字参数。这使得您可以在调用函数时传入任意数量的参数&#xff0c;而不需要在函数定义中为每个参数单独声明一个形参。 这里是它们的使用方法&#xff1a; *arg…...