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

Java面向对象面经总结

目录

面向对象基础

面向对象与面向过程的区别

创建一个对象用什么运算符,对象实体与对象引用的区别

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

构造方法的特点,是否可被重写?

面向对象三大特征

封装

继承

多态

接口和抽象类的共同点和区别

深拷贝和浅拷贝

引用拷贝


参考:Java基础常见面试题总结(中) | JavaGuide

面向对象基础

面向对象与面向过程的区别

面向过程编程(POP)和面向对象编程(OOP)的主要区别在于解决问题的方式不同:

  • POP:面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题

  • OOP:面向对象会先抽象出对象,然后用对象执行方法的方式解决问题

相较于POP,OOP开发的程序拥有下面这些特点:

  • 易维护:由于良好的结构和封装性,OOP程序通常更易维护

  • 易复用:通过继承和多态,OOP 设计使得代码更具复用性,方便扩展功能。

  • 易拓展:模块化拓展使得系统拓展更容易,灵活

创建一个对象用什么运算符,对象实体与对象引用的区别

创建对象使用new运算符,new创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)

  • 一个对象引用可以指向0或1个对象

  • 一个对象可以被多个引用指向

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

  • 对象相等一般比较的是内存中存放的内容是否相等

  • 引用相等一般比较的是他们指向的内存地址是否相等

String str1 = "hello";String str2 = new String("hello");String str3 = "hello";// 使用 == 比较字符串的引用相等System.out.println(str1 == str2);System.out.println(str1 == str3);// 使用 equals 方法比较字符串的相等System.out.println(str1.equals(str2));System.out.println(str1.equals(str3));
 falsetruetruetrue

构造方法的特点,是否可被重写?

构造方法特点:

  • 名称与类名相同

  • 没有返回值

  • 自动执行:在生成类的对象时,构造方法会自动执行,无需显示调用

构造方法不能被重写,但可以被重载。因此,一个类中可以有多个构造方法,这些构造方法可以具有不同的参数列表,以提供不同的对象初始化方式

面向对象三大特征

封装

封装,即把一个对象的状态信息(属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。为外界提供一些可以被外界访问的方法来操作属性

继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以使用父类的功能,但不能选择性地继承父类。

通过继承,可以提高代码的复用性,程序的可维护性

关于继承:

  • 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和私有方法子类无法访问,只是拥有

  • 子类可以拥有自己的属性和方法,即子类可以对父类进行拓展

  • 子类可以用自己的方式实现父类的方法

多态

一个对象拥有多种表现形式,具体表现为父类的引用指向子类的实例。父类引用可以指向子类实例,这是因为子类具备父类中所有的特性(属性和方法)。通过父类引用,能够调用父类中定义的方法,但是无法直接调用子类特有的方法。

子类引用无法指向父类对象

class Parent {public void parentMethod() {System.out.println("Parent method");}}​class Child extends Parent {public void childMethod() {System.out.println("Child method");}}​public class Main {public static void main(String[] args) {Parent parent = new Child(); // 父类引用指向子类实例parent.parentMethod();       // 调用父类方法// parent.childMethod();     // 编译错误,父类引用无法访问子类特有方法​// 如果需要调用子类特有方法,可以进行强制类型转换Child child = (Child) parent;child.childMethod(); // 调用子类方法}}
 ​

多态特点:

  • 对象类型和引用类型之间具有继承/实现的关系

  • 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定

  • 多态不能调用“只在子类存在但是在父类不存在”的方法

  • 如果子类重写了父类的方法,真正执行的是子类重写的方法,如果子类没有重写父类的方法,执行的是父类的方法

 class Animal {public void makeSound() {System.out.println("Some generic animal sound");}}​class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}}​class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows");}}​class Bird extends Animal {@Overridepublic void makeSound() {System.out.println("Bird chirps");}}​public class Main {public static void makeAnimalSound(Animal animal) {//animal调用哪个类的方法,在运行时才确定animal.makeSound(); // 调用子类重写的方法}​public static void main(String[] args) {makeAnimalSound(new Dog()); // 输出:Dog barksmakeAnimalSound(new Cat()); // 输出:Cat meowsmakeAnimalSound(new Bird()); // 输出:Bird chirps}}
 ​

接口和抽象类的共同点和区别

接口和抽象类的共同点

  • 实例化:接口和抽象类均不能被实例化,必须被实现或被继承后才能创建具体的对象

  • 抽象方法:接口和抽象类都可以包含抽象方法。抽象方法没有方法体,必须在子类或实现类中实现

接口和抽象类的区别:

  • 设计目的:接口主要用于对类的行为进行约束,实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调所属关系

  • 继承和实现:一个类只能继承一个父类,但一个类可以实现多个接口,一个接口也可以实现多个接口

  • 成员变量:接口中的成员变量只能是public static final类型的,不能被修改且必须有初始值。抽象类的成员变量类型可以任意,可以在子类中被重新定义或赋值

  • 方法:抽象类中可以包含抽象方法和非抽象方法。对于接口,Java8之前,接口中的方法默认是public abstract,也就是只有方法声明,从Java8开始,可以在接口中定义default方法和static方法,Java9起,接口可以包含private方法

Java8引入的default方法用于提供接口方法的默认实现,可以在实现类中被覆盖

接口中static方法无法在实现类中被覆盖,static方法通常用于定义一些通用的,与接口相关的工具方法,一般很少用

Java 9 允许在接口中使用 private 方法。private方法可以用于在接口内部共享代码,不对外暴露

深拷贝和浅拷贝

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),如果对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是拷贝对象和原对象共用一个内部对象

  • 深拷贝:深拷贝会完全复制整个对象,包括这个对象包含的内部对象

引用拷贝

引用拷贝就是两个不同的引用指向同一个对象

shallow&deep-copy

相关文章:

Java面向对象面经总结

目录 面向对象基础 面向对象与面向过程的区别 创建一个对象用什么运算符,对象实体与对象引用的区别 对象相等和引用相等的区别 构造方法的特点,是否可被重写? 面向对象三大特征 封装 继承 多态 接口和抽象类的共同点和区别 深拷贝…...

红队工具使用全解析:揭开网络安全神秘面纱一角

红队工具使用全解析:揭开网络安全神秘面纱一角 B站红队公益课:https://space.bilibili.com/350329294 学习网盘资源链接:https://pan.quark.cn/s/4079487939e8 嘿,各位网络安全爱好者们!在风云变幻的网络安全战场上&am…...

OpenLinkSaas 2025年第一季度开发计划

OpenLinkSaas在2025的发展方向是强化基础设施和研发协作,弱化管理相关的功能。 为了根据参与到软件研发的整个流程,OpenLinkSaas会增加一系列的基础设施项目,并和OpenLinksaas进行深度整合。 目前计划中的基础设施: 链路追踪系统(OpenDragonF…...

【python小工具】怎么获取视频的关键帧频率?

使用 FFmpeg 提取 MP4 视频的关键帧并计算关键帧频率可以按以下步骤进行: 提取关键帧: 使用 FFmpeg 提取视频中的关键帧可以通过以下命令实现: ffmpeg -i input.mp4 -vf "selecteq(pict_type,I)" -vsync vfr keyframes_%03d.jpg…...

数字孪生可视化在各个行业的应用场景

数字孪生技术,作为新一代信息技术的集大成者,正在深刻改变着我们对物理世界的认知和管理方式。本文将探讨数字孪生可视化在不同行业的应用场景,以及它们如何赋能行业数字化转型。 1. 智慧城市与交通 在智慧城市领域,数字孪生技术…...

Python实现windows自动关机

python <shut.py> import ntplib from datetime import datetime, timezoneimport time import osimport easygui# net time def get_network_time():time.sleep(3)"""从网络时间服务器获取时间"""client ntplib.NTPClient()response c…...

Go可以使用设计模式,但绝不是《设计模式》中的那样

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

【C语言】_使用冒泡排序模拟实现qsort函数

目录 1. 排序函数的参数 2. 排序函数函数体 2.1 比较元素的表示 2.2 交换函数Swap的实现 2.3 排序函数bubble_sort的实现 3. 测试整型数据排序 3.1 整型数据比较函数cmp_int的实现 3.2 整型数据排序后输出函数print_int的实现 3.3 整型数据测试函数test_int的实现 3…...

openCvSharp 计算机视觉图片找茬

一、安装包 <PackageReference Include"OpenCvSharp4" Version"4.10.0.20241108" /> <PackageReference Include"OpenCvSharp4.runtime.win" Version"4.10.0.20241108" /> 二、准备两张图片 三、编写代码 using OpenCv…...

从零开始开发纯血鸿蒙应用之处理外部文件

从零开始开发纯血鸿蒙应用 一、外部文件二、外部文件的访问形式1、主动访问2、被动访问 三、代码实现1、DocumentViewPicker2、Ability Skills3、onNewWant 函数4、冷启动时处理外部文件 一、外部文件 对于移动端app来说&#xff0c;什么是外部文件呢&#xff1f;是那些存储在…...

Spring中三级缓存详细讲解

1、Spring三级缓存是什么&#xff0c;过程是怎么样的&#xff1f; Spring 中的三级缓存主要用于单例 Bean 的生命周期管理&#xff0c;特别是在循环依赖时&#xff0c;它通过不同阶段暴露 Bean 实例来确保依赖注入的顺利完成。缓存的内容如下&#xff1a; 一级缓存 (singleton…...

论文阅读:《Whole-animal connectomes of both Caenorhabditis elegans sexes》

一 论文整体概述 论文下载链接&#xff1a;《Whole-animal connectomes of both Caenorhabditis elegans sexes》 补充信息和额外数据&#xff1a;https://www.nature.com/articles/s41586-019-1352-7 1. 作者期刊背景 该论文由Scott W. Emmons&#xff0c;David H. Hall等…...

嵌入式开发之STM32学习笔记day03

STM32之ADC&#xff08;模拟数字转换器&#xff09; 1 ADC简述2 ADC转换时间3 ADC转化结果存放机制4 ADC转化结果存放机制5 ADC电压转换 1 ADC简述 ADC&#xff08;Analog-Digital Converter&#xff09;模拟—数字转换器&#xff1b;ADC可以将引脚上连续变化的模拟电压转换为…...

windows10 安装 Golang 版本控制工具g与使用

下载包&#xff1a;https://github.com/voidint/g/releases 解压&#xff0c; 并添加到环境变量 g 常用命令 查询当前可供安装的stable状态及所有的 go 版本 # stable 版本 g ls-remote stable# 所有版本 g ls-remote安装目标 go 版本1.23.4g install 1.23.4切换到已安装的…...

SpringBoot 使用 Cache 集成 Redis做缓存保姆教程

1. 项目背景 Spring Cache是Spring框架提供的一个缓存抽象层&#xff0c;它简化了缓存的使用和管理。Spring Cache默认使用服务器内存&#xff0c;并无法控制缓存时长&#xff0c;查找缓存中的数据比较麻烦。 因此Spring Cache支持将缓存数据集成到各种缓存中间件中。本文已常…...

R数据分析:多分类问题预测模型的ROC做法及解释

有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…...

数据结构与算法之二叉树: LeetCode 654. 最大二叉树 (Ts版)

最大二叉树 https://leetcode.cn/problems/maximum-binary-tree/ 描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值递归地在最大值 左边 的 子数组前缀上 构建左子树递归地在最大值…...

Linux 容器漏洞

定义&#xff1a;Linux 容器漏洞是指在容器技术&#xff08;如 Docker、LXC 等&#xff09;运行环境中存在的安全弱点。这些漏洞可能存在于容器镜像本身、容器运行时&#xff08;如 runc&#xff09;、容器编排工具&#xff08;如 Kubernetes&#xff09;或者容器与主机之间的交…...

file与io流(1)

-1- java.io.File类的使用 &#xff08;1&#xff09; 概述 File类及本章下的各种流&#xff0c;都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#xff08;俗称文件夹&#xff09;&#xff0c;与平台无关。&#xff08;体会万事万物皆…...

忘记了PDF文件的密码,怎么办?

PDF文件可以加密&#xff0c;大家都不陌生&#xff0c;并且大家应该也都知道PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和offi…...

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

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...