【八股文】面向对象基础

【八股文】面向对象基础

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

  • 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。
  • 面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。

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

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

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

  • 对象的相等一般比较的是内存中存放的内容是否相等。
  • 引用相等一般比较的是他们指向的内存地址是否相等。

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));
false
true
true
true
  • == 运算符比较的是字符串的引用是否相等。
  • equals 方法比较的是字符串的内容

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

  • 构造方法是一种特殊的方法,主要作用是完成对象的初始化工作。如果一个类没有声明构造方法,也可以执行!因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。如果我们自己添加了类的构造方法(无论是否有参),Java 就不会添加默认的无参数的构造方法了。我们一直在不知不觉地使用构造方法,这也是为什么我们在创建对象的时候后面要加一个括号(因为要调用无参的构造方法)。如果我们重载了有参的构造方法,记得都要把无参的构造方法也写出来(无论是否用到),因为这可以帮助我们在创建对象的时候少踩坑

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

  • 名字与类名相同。
  • 没有返回值,但不能用 void 声明构造函数。
  • 生成类的对象时自动执行,无需调用。

面向对象三大特征

封装

  • 封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。就好像我们看不到挂在墙上的空调的内部的零件信息(也就是属性),但是可以通过遥控器(方法)来控制空调。如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。就好像如果没有空调遥控器,那么我们就无法操控空凋制冷,空调本身就没有意义了(当然现在还有很多其他方法 ,这里只是为了举例子)。

继承

  • 不同类型的对象,相互之间经常有一定数量的共同点。例如,小明同学、小红同学、小李同学,都共享学生的特性(班级、学号等)。同时,每一个对象还定义了额外的特性使得他们与众不同。例如小明的数学比较好,小红的性格惹人喜爱;小李的力气比较大。继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承,可以快速地创建新的类,可以提高代码的重用,程序的可维护性,节省大量创建新类的时间 ,提高我们的开发效率

多态

  • 对象类型和引用类型之间具有继承(类)/实现(接口)的关系;
  • 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定;
  • 多态不能调用“只在子类存在但在父类不存在”的方法;
  • 如果子类重写了父类的方法,真正执行的是子类覆盖的方法,如果子类没有覆盖父类的方法,执行的是父类的方法。

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

  • 都不能被实例化。

  • 都可以包含抽象方法。

  • 都可以有默认实现的方法(Java 8 可以用 default 关键字在接口中定义默认方法)。

  • 接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。

  • 抽象类主要用于代码复用,强调的是所属关系。

  • 一个类只能继承一个类,但是可以实现多个接口。

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

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

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
  • 深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
  • 引用拷贝就是两个不同的引用指向同一个对象。

在这里插入图片描述

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

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

相关文章

rust gui fltk

FLTK 图形用户界面库的 Rust 绑定。 fltk crate 是一个跨平台的轻量级 GUI 库,可以静态链接以生成小型、独立且快速的 GUI 应用程序。 doc https://www.rust-lang.org/zh-CN/learn/get-started https://docs.rs/fltk/latest/fltk/ install $ curl --proto http…

安达发|APS排产软件的机台产线任务甘特图功能详解

在现代制造业中,高级计划与排产是制造业运营的关键环节。为了提高生产效率、降低成本并确保产品质量,企业需要对生产过程进行精细化管理。APS(高级计划与排产)系统作为一种先进的生产计划和调度工具,可以帮助企业实现这…

过了30岁了,一定要专注一件事情?视频号值得尝试!

经常说视频号下载助手, 但发现大多数的大佬都只是先专注一件事情。 小编初6就回来了,和一个大佬吃饭,虽然人家规模并不大,但日引客户上千也是基本的。 这里给大家揭秘一下,他的做法!!&#x…

Nginx返回502错误提示问题原因常用解决方法

Nginx返回502错误提示问题原因和常用解决方法 1. 因网站的访问量大,而php-cgi的进程数偏少,导致nginx 返回502错误 解决方法:针对这种情况的502错误,需增加php-cgi的进程数。 一般一个php-cgi进程占20M内存,你可以自…

3ds Max视频怎么渲染 3ds Max云渲染操作

在3ds Max软件中制作视频动画本质上是逐帧生成画面,并将这些连续帧串联起来创造出动态连贯的视觉效果。常见的视频帧率包括25 FPS(每秒帧数)、60 FPS、以及120 FPS等,帧率的提升可以使视频动画更加流畅。在实质上,视频渲染就是动画渲染&#…

力扣:45. 跳跃游戏 II

动态规划: 1.声明一个dp数组来表示到下标i时要跳转的最小次数,同时要个每个dp数组的值赋值为最大。之后初始化dp【0】0,用for循环来进行遍历下标i和遍历下标i之前的值,判断条件为如果i之前的某个下标跳转的距离>i时要根新dp【…

MakerPlace by Michaels:与Etsy一争高下的手工艺品新平台

Michaels是北美规模很大的专业艺术与手工艺品零售商,在加拿大和美国有1290家店。作为一个新的手工艺品在线交易平台——MakerPlace by Michaels 充满无限机遇!所以各位跨境人们也不要错过这个平台,跟着我一起来了解一下吧! MakerP…

平台+低代码:中小企业数字化转型普惠之路

随着数字化转型的深入推进,中小企业面临着数字化转型的压力和挑战。如何在有限的资源和条件下,实现高效、便捷的数字化转型,成为中小企业亟待解决的问题。本文将以“平台低代码”为主题,探讨中小企业数字化转型的新模式&#xff0…

武汉灰京文化展望未来游戏产业,科技创新引领全面升级的游戏体验

随着科技的迅速发展,未来游戏产业的发展将迎来一个全新的纪元。科技创新将引领游戏体验的全面升级,让玩家不再仅仅是通过屏幕与游戏互动,而是能够亲身感受到游戏世界的存在。这种全新的游戏体验将推动游戏产业不断突破创新,吸引更…

探究二维码技术:连接现实与数字世界的桥梁

title: 探究二维码技术:连接现实与数字世界的桥梁 date: 2024/2/19 13:15:36 updated: 2024/2/19 13:15:36 tags: 二维码技术数据编码纠错算法图像处理商业应用安全验证实时交互 引言: 二维码已经成为现代社会中广泛应用的一种技术工具。它不仅在商业领…

牛客网 OR141 密码检查

答案&#xff1a; #include <stdio.h> #include <string.h> #include <ctype.h> int main() {int n 0;int count1 0, count2 0, count3 0;scanf("%d", &n);while (n--){char ch[100];scanf("%s", ch);int len strlen(ch);if (…

图形化编程:启蒙儿童的创意之窗

传统的编程语言对于初学者&#xff0c;尤其是儿童来说&#xff0c;可能会显得复杂和难以理解。为了解决这个问题&#xff0c;图形化编程应运而生。图形化编程是一种通过拖拽图形块来编写程序的方法&#xff0c;它让编程变得简单、直观和有趣&#xff0c;为儿童提供了一个启蒙创…

【Python笔记-设计模式】惰性评价模式

一、说明 将某些对象的创建或计算延迟到真正需要它们的时候&#xff0c;以减少不必要的资源消耗和提高性能。 惰性评价在Python中实现也成为生成器&#xff0c;一般通过yield关键字实现。 (一) 解决问题 在处理大量数据时&#xff0c;使用惰性加载可以避免一次性加载所有数…

spark为什么比mapreduce快?

spark为什么比mapreduce快&#xff1f; 首先澄清几个误区&#xff1a; 1&#xff1a;两者都是基于内存计算的&#xff0c;任何计算框架都肯定是基于内存的&#xff0c;所以网上说的spark是基于内存计算所以快&#xff0c;显然是错误的 2;DAG计算模型减少的是磁盘I/O次数&…

linux部署File Browser文件管理系统

File Browser是go语言编写的软件&#xff0c;可以通过浏览器对服务器上的文件进行管理 创建部署目录 /data/filebrowser mkdir -p /data/filebrowser && cd /data/filebrowser下载File Browser软件包 wget https://github.com/filebrowser/filebrowser/releases/do…

基于SSM的在线教学质量评价系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的在线教学质量评价系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spri…

远程办公利器,有哪些远程办公利器好用

远程办公利器&#xff0c;有哪些远程办公利器好用 有的时候需要紧急办公位&#xff0c;但是你的电脑、公司、办公室、酒店、网吧、家里的电脑等极为不方便&#xff0c;这时有远程办公利器就好了。在网上查了下&#xff0c;发下个好用的工具&#xff0c;这里分享下。 1、…

C++项目开发编译踩坑记录

git工具配置了autocrlfinput下载的代码换行符默认从CRLF转换为LF&#xff0c;导致在windows桌面开发时&#xff0c;编译C代码全文报语法错误 问题现象&#xff1a;使用git clone命令从库上下载下来的代码&#xff0c;使用VS 2022编译&#xff0c;全文报语法错误&#xff0c;但…

API关键词接口的应用范围说明

一、应用场景 适用商家批发选品&#xff0c;价格监控&#xff0c;品牌监控&#xff0c;实地商家进货 二、公共参数 请求地址: https://api-gw.onebound.cn/1688/item_search 三、请求参数 请求参数&#xff1a;q女装&start_price0&end_price0&page1&cat0&…

UE5 C++ UObject实例化

一.创建UObject C类 在MyObject中声明结构体FMyDataTableStruct 在MyPawn里面&#xff0c;先将头文件里包含 MyObject.h 在MyPawn中声明一个UMyObject类型的指针 TSubclassOf 是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类&#xff0c;允许设计者指定伤害类型…