Java面试题-Java核心基础-第五天(面向对象基础)

目录

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

二、创建一个对象用什么运算符,对象实体与对象引用有什么区别?

三、对象的相等和引用的相等有什么区别

四、如果一个类没有构造方法,程序能正常执行吗?

五、构造方法有什么特点,可以被重写吗?

六、面向对象的三大特征

七、接口和抽象类的异同


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

面向过程是以方法为单位,都是直接的一个一个的方法调用

面向对象则是将万事万物都抽象成对象,然后调用对象里面的方法,来操作对象里面的数据。就是封装了一层相对于面向过程

面向对象更加的  易复用、易维护、易扩展

但是面向过程效率更好

二、创建一个对象用什么运算符,对象实体与对象引用有什么区别?

new 

对象实体是直接存在于堆中,而对象引用不一定在堆中 如果是非static 非final的成员属性那么就存在与堆中  如果是static的final的就存在于方法区  如果是方法里面的就是存在于虚拟机栈的局部变量表中

三、对象的相等和引用的相等有什么区别

对象的相等是说对象的内容一样

对象的引用相等指的是对象的引用地址相等

四、如果一个类没有构造方法,程序能正常执行吗?

可以正常执行,因为系统会提供一个默认的无参构造方法

五、构造方法有什么特点,可以被重写吗?

特点:

1. 样子:

和类同名,而且没有返回值 连void都没有

2. 执行的时间

是创建对象的时候自动执行,无需手动调用

不能被重写

重写没有意义 构造方法肯定只能是在本类中用来创建本类的对象的

六、面向对象的三大特征

封装性

将数据隐藏在对象的内部,不能直接进行访问 可以通过对外的方法进行访问

它是使用权限修饰符实现的

不仅可以封装属性 还可以封装方法、构造器等  例如单例模式就是对构造器进行封装 使用private修饰 不能直接创建对象

封装性描述的是可见性的大小  是否能被看到

继承性

它是使用已存在的类来创建新的类的一种方法

就可以在子类中无需再次编写父类中的那些属性方法,就能获取到父类中的属性方法

大大提高了代码复用性、扩展性(无需编写,容易扩展)

注意:这里其实是能够获取到父类中所有的属性和方法,包括私有的

只是说私有的不能直接访问,而可以使用公共方法来进行访问

多态性

多态顾名思义就是多种形态,就是子类实例的多种形态

父类引用指向子类对象,这个子类对象可以是多变的 只要构成了父子关系或者是接口的实现关系

作用就是大大的提高了程序的灵活性,左边的父类引用可以不变,而右边的子类对象可以发生改变

其实面向接口、面向抽象编程就是基于多态性实现的 已到达高内聚低耦合的效果

例如在jdbc编程这个典型的面向接口编程,就是只需要设定一套接口规则 由不同的数据库厂商按照自己的情况来编写其具体的实现类即可

七、接口和抽象类的异同

相同点:

1. 都不能被实例化

2. 都可以在其中定义抽象方法,由具体的子类/实现类去根据需要具体实现

3. 都可以定义默认方法 静态方法(接口JDK8中)

不同点:

1. 接口描述的一种规范,一种功能 如果实现了一个接口 表示的是具备了一种功能 而没有其他关系了 而抽象类  继承了抽象类则是一种is a 的关系 父子关系 更多的是一种代码的复用

接口的典型应用就是面向接口编程,还有动态代理(GDK动态代理)等....
抽象类的典型应用:模板方法设计模式   可以在抽象类中定义好一套模板  只是保留部分的抽象方法,交由子类去具体实现

2. 接口可以多继承 而抽象类只能单继承

3. 接口中的属性必须是 public static final的 而且还必须赋上初值 

而抽象类中属性默认是default的   可以不去赋上初值,有默认值   可以被子类重新定义 重新赋值

4. 接口没有构造器  而抽象类中有构造器  即使不能实例化但也是有构造器的,这个构造器用于子类实例话的时候  需要调用父类的构造器  以达到能够获取到父类中的结构

八、深拷贝和浅拷贝了解吗?

浅拷贝是说也是拷贝了,但是仅仅只是基本数据类型的拷贝 而对于引用类型 只是复制了其引用 所以其对象实体并没有复制 还是使用的同一个对象实体

具体实现可以让类实现Cloneable接口,实现clone方法  然后在这个方法中调用Object类中的clone方法然后返回即可:

public class Address implements Cloneable{private String name;// 省略构造函数、Getter&Setter方法@Overridepublic Address clone() {try {return (Address) super.clone();} catch (CloneNotSupportedException e) {throw new AssertionError();}}
}

可以发现其对象引用只是复制,实体没有复制:

public class Person implements Cloneable {private Address address;// 省略构造函数、Getter&Setter方法@Overridepublic Person clone() {try {Person person = (Person) super.clone();return person;} catch (CloneNotSupportedException e) {throw new AssertionError();}}
}

结果:

Person person1 = new Person(new Address("武汉"));
Person person1Copy = person1.clone();
// true
System.out.println(person1.getAddress() == person1Copy.getAddress());

深拷贝就是完完全全的拷贝,其引用类型的属性,不是简单的复制其对象引用,而是一个全新的对象然后再赋值给属性

可以通过再次设值的方法实现深拷贝:

@Override
public Person clone() {try {Person person = (Person) super.clone();person.setAddress(person.getAddress().clone());return person;} catch (CloneNotSupportedException e) {throw new AssertionError();}
}

此时的结果就是false了

当然深拷贝简单一点的话,可以使用序列化和反序列化的方式

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

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

相关文章

爆肝整理,性能测试-非GUI模式执行Jemter压测,看这篇就够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、上传脚本 把在…

智慧公厕:探索未来城市环境卫生设施建设新标杆

智慧公厕是当代城市建设的一项重要举措,它集先进技术、人性化设计和智能管理于一体,为人们提供更为舒适、便捷和卫生的厕所环境。现代智慧公厕的功能异常丰富,从厕位监测到多媒体信息交互,从自动化清洁到环境调控,每一…

chatgpt图片识别、生成图片、语音对话多模态深度试玩

大模型替代人的工作的能力,越来越明显了。最近chatgpt支持多模态了,看这大佬们玩的不易乐乎,手痒也想试一试,因此有给openai上供了20刀。 另外我是gpt的拥护者,但是周围的同事有对此担忧,因为他们长期积累的…

Tengine 边缘AI计算框架移植RV1126(包括opencv的交叉编译)

目录 1.编译opencv 2.拷贝SDK源码到虚拟机 3. 拉取TIM-VX代码 4.拉取Tengine源码并配置 1.编译opencv 编译opencv是为了,在编译Tengine时指定OpenCVConfig.cmake,以便寻找特定的opencv动态库 01.从github拉取opencv源代码 git clone -b 4.5.5 https://github.co…

【AIFEM案例操作】水轮机转轮强度和模态分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件,助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题,软件提供高效的前后处理工具和高精度的有限元求解器,帮助用户快速、深入地评估结构的力学性能,加速产…

DICOM图像像素值、灰度值与CT值的解释及关系

​DICOM图像像素值、灰度值与CT值之间的关系可以通过以下方式进行解释: DICOM图像像素值:在DICOM图像中,像素值是用来表示图像信息的基本单位。这些值通常在0-4096的范围内,反映了图像的像素亮度。 DICOM图像灰度值:灰…

H264短期参考帧和长期参考帧

问题引出 最近在做短期参考帧的marking操作时发现一个问题,我的预期是用两个短期参考帧,其中一个短期参考帧为当前帧的前一帧,另一个为距离当前位置较远的一个帧。 在大多数的帧都没有问题,但是在个别帧的位置会发生参考帧列表中帧的顺序和预期不一致的情况,我在第28帧的…

SLAM算法中状态估计的算法有哪些?

状态估计 在SLAM(Simultaneous Localization and Mapping)中,状态估计是核心组件之一,其主要目的是估计机器人的轨迹(或姿态)和地图特征的位置。针对不同的传感器、场景和应用,已经发展出了多种状态估计方法。以下是一些主要的状态估计方法: 扩展卡尔曼滤波(Extended…

多测师肖sir_高级金牌讲师___python之json模块

python之json模块 python标准模块之json 定义:json (java script object notation)是轻量级的文本数据交换格式 案例json: json和字典 一样 一、json模块可以实现json数据的序列化和反序列化 (1)序列化…

Linux常用命令——comm命令

在线Linux命令查询工具 comm 两个文件之间的比较 补充说明 comm命令可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。 交集:打印出两个文件所共有的行。求差:打印出指定文件所包…

django无法导入第三方库

引子 有的人可能会很困惑,为什么自己在pip中安装了某个包,但是在django中死活无法导入。 在cmd中能够导入。 启动django,总是无法导入。 本文将会用一分钟解决你的困惑。 正文 那么本文以上述的第三方库dj_db_conn_pool为例,…

WuThreat身份安全云-TVD每日漏洞情报-2023-10-16

漏洞名称:Apache HTTP/2 安全漏洞 漏洞级别:高危 漏洞编号:CVE-2023-44487,CNVD-2023-75597,CNNVD-202310-667 相关涉及:Google Cloud Platform 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-25208 漏洞名称:Adobe Commerce and Magento Ope…

汽车智能制造中的RFID技术在供应链生产管理中的应用

行业背景 汽车零部件工业是汽车工业中至关重要的一部分,对于汽车工业的长期稳定发展起着基础性的作用,近年来,汽车配件配套市场规模达到了2000亿元,维修市场达到了600亿元,随着汽车国产化的推进,汽车零部件…

k8s 暴露pod

kubenretes中暴露Pod及Service的6种方式 ,分别为port_forward、hostNetwork、hostPort、nodePort、loadBalancer、Ingress。 下面讲下nodeport nodePort Kubernetes中的service默认情况下都是使用的ClusterIP这种类型,这样的service会产生一个Cluster…

Webpack5 htmlwebpackplugin用法

文章目录 HtmlWebpackPlugin介绍HtmlWebpackPlugin用法1. 安装HtmlWebpackPlugin插件:2. 引入HtmlWebpackPlugin插件:3. 配置HtmlWebpackPlugin:4. 更多HtmlWebpackPlugin配置选项: 总结 HtmlWebpackPlugin介绍 Webpack是一个功能…

Linux命令及命令来源

Linux是一个强大的操作系统,拥有许多内建的命令。以下是常见的Linux命令及其简单的解释和用法: ls:列出目录内容。 来源:list。用法:ls、ls -l、ls -a cd:改变当前目录。 来源:change director…

AMEYA360-罗姆ROHM马来西亚工厂新厂房竣工

全球知名半导体制造商罗姆为了加强模拟IC的产能,在其马来西亚制造子公司ROHM-Wako Electronics (Malaysia) Sdn. Bhd.(以下简称“RWEM”)投建了新厂房,近日新厂房已经竣工,并举行了竣工仪式。 RWEM此前主要生产二极管和LED等小信号产品&#…

Linux网络编程系列之UDP广播

Linux网络编程系列 (够吃,管饱) 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

Django ORM查询

Django提供了一套非常方便的类似SqlAlchemy ORM的通过对象调用的方式操作数据库表的ORM框架。 Django ORM操作主要分为以下几类: 增:向表内插入一条数据删:删除表内数据(物理删除)改:update操作更新某条数…

数字化 | 智能电子日历

想要一款随时随地都能掌握日期的电子日历吗? WiFi通信,实时更新,超低功耗,可充电,超长续航,电子纸,黑白红三色显示的电子日历,就是你的最佳选择! 无论是在办公室、家中或…