面试题
抽象类和接口有什么共同点和不同点?
如果两个对象不一样那他们的hash code一定不同?
错误 小概率相同
如果两个对象的hash code不同 对象一定不同
如果重写equals需要注意什么?
重写equals一定要重写hash code方法
为什么重写hash code?
因为使用hash map(是一个数据结构) 需要equals和hash code配合计算
如何在hash map中配合工作?
key值判断相等需要用到equals()
hashmap存储的时候需要用到hashcode()
key一样的对象会根据hashcode分配到同一个桶同一个数组单元
装箱和拆箱?
基本类型转包装类交装箱 包装类转基本类型叫拆箱
构造方法
静态包导入后一直存在
Person类叫父类 超类 基类
Son1 叫 子类 派生类
子类执行时父类一定优先执行 子类执行继承父类的全部
子类和父类定义一样的东西时 子类执行时父类的东西会消失 父类被覆盖
通过super能调用父类,子类调用父类的与自己重复的方法用super.m1();就是子类构造器调用父类加super()
子类想调用父类构造器要用super关键字,子类调用super必须放在第一行
多态
多态就是多种形态,例如X有多种形态
一个类只能有一个父类
一个父类有好多派生类
object是所有派生类的父类 除了他派生类就只有一个父类
final阻止继承阻止重写
强制类型转换
//祖先类的引用 = 子孙后代类的堆中值的地址
cast :转换
强制类型转换,最后要满足条件
强制转换必须是直系关系,
Son1 和Son2不具有直系关系,所以不能强制类型转换
判断这个对象,是否是他本身的实例或者是他子孙后代类的实例
抽象类只抽象共有的东西,提取共性,继承这个类的必须实现他的部分功能
抽象类和接口有什么共同点和不同点
object是所有子类的父类,所有类都有这几种方法
equals是比较两个值的地址是否是同一个地址
getClass获取类的信息
notify是唤醒一个线程,notifyAll是唤醒全部线程
wait是让当前线程进入等待队列
toString 输出类的路径
字符串里面equals是比较两个值是否相等
== 引用类型是比较地址是否相等,基本类型是比较值相等
hashCode 方法
哈希==散列(没有规律,但是相对均匀分配)
每个对象都有自己的hashCode,对象不一样,hashCode小概率相同,基本不同,如果两个对象的hashCode不同,那他一定是两个对象
如果重写equals的话一定要重写hashCode方法,
为什么要重写hashCode:hashmap(数据结构)使用这个的时候,一定是hashCode和equals同时使用,进行计算
hashmap的key值判断相等需要用到equals()
hashmap存储的时候需要用到hashcode()
key一样的对象会根据hashcode分配到同一个桶
s和t重写equals导致计算方式改变,他们的值和地址就相等了
默认调用toString方法
final
泛型:广泛的代表所有类型
基本类型自动转包装类叫装箱,包装类自动转基本类型叫拆箱
什么叫128陷阱?
-128到127之间输出都是true
基本类型都是一样的,就是类似常量池,节省空间和内存
抽象类
抽象类去定义本身是父类 有子类去实现它
每个动物都会移动 每种动物之间移动方式不一样自己去实现
抽象类的派生类想要继承派生类必须具备抽象类定义的每个功能