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面试指南,有需要的可自行检索加入其星球获得。