面试突击:面向对象基础

本文已收录于:https://github.com/danmuking/all-in-one(持续更新)

面向对象三大特征

封装

封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息. 但是可以提供一些可以被外界访问的方法来操作属性. 就好像我们看不见电视内部的零件细节(属性),但是可以通过遥控器来控制电视机(方法). 如果属性不想被外界访问,我们大可不必提供方法给外界访问. 但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了. 就好像如果没有遥控器,那么我们就无法操作电视机,电视就变成了一块废铁.
下面给出了一个简单的代码示例:

public class People {private int age;//id属性私有化private String name;//name属性私有化//获取age的方法public int getAge() {return age;}//设置age的方法public void setAge(int id) {this.age = age;}//获取name的方法public String getName() {return name;}//设置name的方法public void setName(String name) {this.name = name;}
}

在上面的代码中,agename就是对象的属性并且被private修饰, 这意味这这些属性无法被外部直接访问. 但是可以通过类提供的方法, 例如getxxx()setxxx()方法来间接访问对应的属性.

继承

即使是不同类型的对象, 它们相互之间也经常有一定的共同点. 例如, 小明同学、小红同学、小李同学, 都具有学生的特性(班级、学号等). 同时, 不过不同的对象也可能具有自己独立的特性. 例如小明是一个高中生, 小红有画画的技能等等. **继承是使用已存在的类的定义为基础来构建新类的技术, 新类的定义可以增加新的数据或新的功能, **也可以用父类的功能, 但不能选择性地继承父类. 通过使用继承, 可以快速地创建新的类, 可以提高代码的重用, 程序的可维护性, 节省大量创建新类的时间, 提高我们的开发效率.
关于继承如下 3 点请记住:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有.
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展.
  3. 子类可以用自己的方式实现父类的方法.

继承一般代表一种is-a的所属关系, 父类和子类之间通常被认为具有强关联, 因此在使用继承是需要慎重.

多态

多态, 顾名思义, 表示一个对象具有多种的状态,具体表现为**父类的引用可以指向不同子类的实例. **
多态的特点:

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

这里要写段代码的例子

在 Java 中, 多态的实现通常会涉及到接口和继承, 然而这两种不同的实现方式分别有不同的特点, 细节部分可以看看这里面相对象面试题详解, 大家在面试中如果说到面相对象的特征可以结合上这道题进行一定的拓展.

点关注,不迷路

好了,以上就是这篇文章的全部内容了,如果你能看到这里,非常感谢你的支持!
如果你觉得这篇文章写的还不错, 求点赞👍 求关注❤️ 求分享👥 对暖男我来说真的 非常有用!!!
白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !

最后推荐我的IM项目DiTing(https://github.com/danmuking/DiTing-Go),致力于成为一个初学者友好、易于上手的 IM 解决方案,希望能给你的学习、面试带来一点帮助,如果人才你喜欢,给个Star⭐叭!

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

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

相关文章

junit mockito 拦截器

拦截器代码 /*** Title:出参ASE加密拦截器* Description: 指定的url拦截,指定返回参数加密* Author: luohaihua* Date: 2024/06/18 16:37* Version: 1.0*/ Slf4j public class ResponseAseEncryptInterceptor extends HandlerInterceptorAdapter {Ove…

消息队列 - 解析 RabbitMQ 的运行机制

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站:…

xshell使用vi命令:bash:vim:command not found

你们好,我是金金金。 场景 此时我通过xshell客户端连接到了远程的虚拟机。想用vi命令编辑一个文件时,显示:bash: vim: command not found 排查 看报错提示就可以知道,没找到vim命令 解决 使用包管理器 apt 来安装 vim 更新你的软…

大模型开发Embedding技术介绍

什么是Embedding? 在自然语言处理(NLP)和机器学习中,Embedding 是一种将高维数据映射到低维连续空间的技术。Embedding 允许我们将词语、句子或其他类型的数据表示成向量,这些向量捕捉了数据的语义和上下文信息。 Em…

数据结构(中)

完全二叉树的第6层有10个结点,那么有(21)个叶子结点。 10-52*2*2*2 设树中某结点不是根结点,则离它最近的祖先结点是双亲结点 一颗有5个结点的深度为3的二叉树采用顺序存储方式存储,存储数组的大小至少为7 看深度&…

民宿小程序在线预约系统开发,提高品牌影响力

在旅游业发展旺盛的当下,也带动了各地民宿的发展。在科技的支持下,民宿小程序得到了快速发展,凭借方便快捷的优势为大众带来新的体验。 民宿小程序的发展为用户提供了便捷的预订渠道,用户可以根据对房间的要求选择,能…

深(广)度优先遍历

994. 腐烂的橘子 BFS (广度优先搜索)可以看成是层序遍历。从某个结点出发,BFS 首先遍历到距离为 1 的结点,然后是距离为 2、3、4…… 的结点。因此,BFS 可以用来求最短路径问题。BFS 先搜索到的结点,一定是…

[HGAME 2022 week1]Matryoshka(古典密码混合)

题目: 直接说方法: 首先这是一段盲文,要先将盲文反转, 然后再用摩斯密码转换 将得到的字符串去掉“,”后,base16解码 在尝试维吉尼亚密码 再用base64解码 然后用凯撒密码 最后栅栏密码(22栏)

第5章 不确定性与风险分析 作业

第5章 不确定性与风险分析 作业 一单选题(共25题,100分) (单选题)当产销量( )盈亏平衡点时,销售收入()总成本。 A. 大于,大于 B. 等于,小于 C. 小于,大于 D. 大于,小于 正确答案: A:大于,大于; (单选题)已知单位产品售价为P,年固定成本为F,…

Linux-账号和权限管理

目录 一、管理用户账号 1、用户账号类型 2、UID--身份标识 3、UID的分类 ​4、用户账号文件​ 5、chage-修改账号密码 5.1、chage—使用格式: 5.2、chage—使用参数: ​6、添加用户账号与管理 6.1、useradd—添加用户 6.2、passwd—设置/修改…

【HarmonyOS NEXT】har 包的构建生成过程

Har模块文件结构 构建HAR 打包规则 开源HAR除了默认不需要打包的文件(build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore)和.gitignore/.ohpmignore中配置的文件,cpp工程的CMakeLists.txt,…

3d隐藏模型为什么就不见了?---模大狮模型网

在3D建模和设计过程中,经常会遇到需要隐藏某些模型的情况。然而,有时候隐藏之后再也找不到这些模型了。这种情况可能让人感到困惑和沮丧。本文将探讨3D隐藏模型后“消失”的原因,并提供一些解决方法,帮助您更好地管理和查找隐藏的…

npm报错:request to https://registry.npm.taobao.org failed处理办法

npm报错:request to https://registry.npm.taobao.org failed处理办法 npm报错:request to https://registry.npm.taobao.org failed, reason certificate has expired 看提示是淘宝镜像过期了。找了一下资料,好像是npm 淘宝镜像已经从 regi…

在Apache Flink中,TableAggregateFunction是一种用户自定义的聚合函数,它允许你实现自定义的聚合逻辑

在Apache Flink中,TableAggregateFunction是一种用户自定义的聚合函数,它允许你实现自定义的聚合逻辑。以下是一个Java代码示例,展示了如何实现和使用TableAggregateFunction。 假设我们想要创建一个简单的表聚合函数,用于计算一…

基于深度学习的图像风格迁移

基于深度学习的图像风格迁移 图像风格迁移(Image Style Transfer)是一种将一幅图像的风格应用到另一幅图像的方法,使目标图像在保持其原有内容的同时呈现出参考图像的风格。深度学习,特别是卷积神经网络(CNN&#xff…

Linux-笔记 g++: internal compiler error: Killed (program cc1plus)报错

前言 编译buildroot的时候报错了,通过查阅资料发现问题可能是编译器进程 cc1plus 被系统终止了。这种情况通常发生在编译过程中消耗了大量的系统资源,特别是内存,而系统为了释放资源而终止了该进程,如系统的物理内存(R…

循环的结构

一.简介 循环结构,一般常用在while,do…while,for循环三个语法,但我们一般来常用的是for循环,while与do…while我们只需要掌握就可以。 于此同时,我们需要掌握一下循环控制的关键字,开始循环时…

服务端⾼并发分布式结构演进之路

在进行技术学习过程中,由于大部分读者没有经历过一些中大型系统的实际经验,导致无法从全局理解一些概念,所以本文以一个"电子商务"应用为例,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举…

【绝对有用】什么是I/O密集型任务 什么是CPU密集型任务,异步IO 如何提高程序的效率?

I/O密集型任务和CPU密集型任务是计算机科学中两种不同类型的工作负载,它们的性能瓶颈在不同的资源上。理解这两者的区别和如何利用异步I/O提高程序效率对开发高效应用程序非常重要。 I/O密集型任务 I/O密集型任务是指那些主要受限于输入/输出操作(例如…

SpringBoot:SpringBoot集成Druid监控慢SQL

一、前言 数据库连接池是一个至关重要的组成部分,一个优秀的数据库连接池可以显著提高应用程序的性能和可伸缩性。常见的连接池:Druid、HikariCP、C3P0、DBCP等等,不过目前大部分都是使用Druid或者SpringBoot默认的HikariCP! 本文…