Java-面向对象
15.面向对象和面向过程的区别?
面向对象是将问题分解成一系列步骤,然后按照一定的顺序
执行。面向过程是将解决问题的参与者,封装成一个个对象,每个对象完成自己的操作。面向对象的三大特征就是封装、继承和多态。
封装
就是隐藏
内部实现细节,仅向外提供必要的属性和方法。继承
就是子类继承父类的方法和属性
,主要是代码复用和扩展。多态
就是同一方法在不同的对象中有不同的实现
。
16.对象实体与对象引用的区别?
对象实体是内存中真实存在的对象实例,对象引用是指向对象实体的指针。
17.对象相等与引用相等的区别?
对象相等比较的是值是否相等,引用相等比较的是内存地址是否相等。
18.Java中的hashCode和equal方法是什么?
hashcode()
在object类中基于内存地址计算哈希值,可以快速比较两个对象是否相等,如果两个对象的哈希值不相等,那么这两个对象一定不相等,常用于hashmap
中判断元素的存储位置。
equals()
方法用于判断两个对象是否相等,默认使用==
比较对象的内存地址,可以重写equals()方法定义自己的相等逻辑。如果重写了equals()方法,通常还需要重写hashCode方法,以保证相等的对象具有相同的哈希值。
19.Java中为什么不支持多继承?
多继承会产生菱形继承
,假如B和C继承了A,但是对A中的方法有不同的实现,此时D同时继承了B和C。那么D要想调用A中的方法就会产生歧义,不知道调用B的实现还是C的实现。
20.深拷贝和浅拷贝区别了解吗?
浅拷贝
只拷贝对象的引用
,不创建新的对象实例
,新旧对象仍然指向同一块内存空间。深拷贝创建一个全新的对象实例
,并将原始对象的所有属性复制到新对象中。浅拷贝性能开销较小,仅复制对象的引用,深拷贝性能开销大,因为要创建新的对象实例。