Java面试(二)

1.int和Integer的区别,二者在==运算时会得到什么结果?
int是基本数据类型,Integer是int的包装类。二者在做==运算时,Integer会自动拆箱成int类型,然后再进行比较,如果两者的int值一样就返回true否则返回false

2.说一说对面向对象的理解
对比面向过程,是两种不同的处理问题的角度
面向过程更注重事情的每一个步骤以及顺序,面向对象更注重有哪些参与者(对象),以及各自需要做什么
面向过程比较直接高效,而面向对象更易于复用、扩展和维护
**封装:**封装的意义在于明确标识出允许外部使用的所有成员函数和数据项,内部细节对外部调用透明,外部调用无需修改或者关心内部实现
**继承:**继承基类的方法,并做出自己的改变和扩展
**多态:**基于对象的 所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同,体现在:继承,方法重写,父类引用指向了子类对象

3.封装的目的是什么,为什么要封装
封装是面向对象编程语言对客观世界的模拟,在客观世界里面,对象的状态信息都被隐藏在对象内部,外界无法直接操作和修改。对一个类或对象实现良好的封装,可以实现以下目的:
1.隐藏类的实现细节
2.让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问
3.可进行数据检查,从而有利于保证对象信息的完整性
4.便于修改,提高代码的可维护性

4.对多态的理解
因为子类其实是一种特殊的父类,因此java允许把一个父类引用变量指向子类对象,无须进行类型转换,也就是所谓的向上转型,由系统自动完成
当一个父类引用指向子类对象时,比如BaseClass obj = new SubClass();obj的编译类型是BaseClass,允许类型是SubClass,当运行时调用该引用变量的方法时,其方法行为总是编写出子类方法的行为特征,而而不是父类方法的行为特征,这就可能出现:相同类型的变量,调用同一个方法时呈现出不同的行为特征

多态的具体体现:
1.一个对象的编译类型和运行类型可以不同
2.编译类型在定义对象的时候就说确定的,不能更改
3.运行类型是可以变化的
4.编译看左边,运行看右边

多态的前提是:两个类存在继承关系

多态的向上转型
1.本质:父类引用指向了子类对象
2.语法: Base obj = new Sub();
3.特点:
编译类型看左边,运行类型看右边
可以调用父类中的所有成员(遵循权限规则)
不能调用子类中的特有成员
最终运行效果看子类具体实现

多态向下转型
1.语法:子类类型 引用 = (子类类型)父类引用
2.只能强转父类的引用而不是强转父类对象
3.要求父类的引用必须指向的当前目标类型的对象
4.可以调用子类中的所有成员

5.Java为什么是单继承,为什么不能多继承
首先Java是单继承的,指的是Java中一个类只能有一个直接的父类。Java不能多继承,一个类是不能继承多个父类的
Java之所以摒弃了多继承这项特征,是因为多继承容易产生混淆,比如两个父类中包含相同方法时,子类在调用该方法或者重写该方法时就会迷惑
准确来说,Java是可以“多继承”的,尽管一个类只能有一个直接父类但是可以有多个间接父类

6.重写和重载的区别
1.发生范围不同:重载发生在本类,重写发生在父子类
2.参数列表不同:重写的参数列表的类型,个数,顺序必须至少有一个不同,但是方法重写的参数列表必须保持一致
3.返回类型的要求不同:重载对返回类型无要求,而重写对范围要求是:父>=子,也就是子类不能缩小
4.修饰符不同:重载对修饰符是无要求的,重写要求子类不能缩小父类的访问范围

7.Object类中的方法
1.Class<?> getClass() : 返回该对象的运行类型
2.boolean equals(Object obj) : 判断指定对象与该对象是否相等
3.int hashCode() : 返回该对象的hashCode值。在默认情况下,Object类的hashCode()方法根据该对象的地址来计算。但是一般来说很多类都重写了该方法,不再根据地址来计算其hashCode()方法值

hashCode:
1.能够提高具有哈希结构的容器的效率
2.两个引用,若指向的是同一个对象,则哈希值肯定一样
3.两个引用,若指向的是不同对象,则哈希值是不一样的
4.哈希值主要是根据地址来的,但是不能把哈希值等价于地址
5.在集合中,可能重写hashCode方法

4.String toString() : 返回该对象的字符串表示 ,当程序使用sout方法输出一个对象,或者把某个对象和字符串进行连接操作的时候,系统会自动调用该对象的toString()方法返回 运行时类名@十六进制的hashCode值 格式的字符串,但是很多类都重写该方法,用于返回可以表示该对象信息的字符串
5.finalize() : 当垃圾回收期确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值