2020-12-06-Java-复习-57(面试题摘要2)

2020-12-19  本文已影响0人  冰菓_

1.编译与运行

编译---静态绑定
运行---动态绑定

2.面对对象三大特性

封装:

继承:
1.子类拥有父类对象所有的属性和方法(包括私有属性和私有方法) ,但是父类中的私有属性和方法子类是无法访问,只是拥有。
2.子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
3.子类可以用自己的方式实现父类的方法。

多态:
编译期多态是指方法重载,运行期多态是指方法重写和向上(下)转型
调用哪个方法在编译成字节码的时候,是可以根据参数类型、参数个数就确定下来的。
向上转型中,方法的调用涉及到了方法重写,此时需要先去父类中找到该方法,然后再去判断子类是否重写了该方法,如果子类重写了该方法,那么就会调用子类的方法

java中的多态:多个子类重写父类的方法以及接口中对方法的重写

动态绑定的前提是:

  1. 发生继承,且一个父类有多个子类。
  2. 在每一个子类中对继承自父类的同一个方法实现了重写。
  3. 发生多态,即: 父类对象变量引用了不同的子类对象。
  4. 父类的对象变量调用了重写的方法,即: 发生了动态绑定。从而实现了多的价值。
    封装性: 安全性和重用性。
    继承性: 高效性和重用性。
    多态性: 统一性(有机性)和高效性。

3.成员变量和局部变量

成员变量
被static修饰的是属于类的
没有被static修饰的是属于实例的
局部变量是属于方法的,随着方法的调用而消失

面试答题步骤:
1.语法上
2.在内存中的储存方式与生存时间
3.成员变量没有被赋值则会自动赋值,二局部变量不会自动赋值

4.对象相等与指向它的引用相等

对象相等比较的内容的相等,引用相等性比较的内存中的地址值
面试题:为什么重写了equals方法要重写hashcode方法,
频繁地调用equals方法是浪费资源的,首先先判断hashcode是否相等,如果hashcode不相等,那么equals一定是不相等的,hashcode相等的话,值也不尽相等,存在hash冲突,所以要调用equals方法进行值的比较
结合"==" "equals"之间的区别,总结如下'=='是比较地址值的,对于基本数据类型是值的比较,"=="的底层是比较hashcode,不重写的话,效果等同于System.identityHashCode,比较的是内存地址值,对于"equals"的用法没有重写等同于"=="的功能,为什么要提供"equals"方法,我想意义在于结构上的解耦(与hashcode结合使用),重写"equals"方法,对于对象的比较就是值的比较
hashcode的作用,散列码,用于确定对象在散列表中的位置,加快执行的速度

上一篇下一篇

猜你喜欢

热点阅读