【面试题 - Java基础】海能达一面

若你困于无风之地,我将为你奏响高空之歌

1. 多态的实现及作用

多态定义: 表示同一个接口使用不同实例而执行不同操作。在Java 语言中,变量对象是多态的。有一句话形容的非常好,同一操作作用于不同的对象,可以产生不同的效果。这就是多态。

多态的实现:

(1)重写
(2)接口
(3)抽象类与抽象方法

多态的作用:

派生类的功能可以被基类的方法或引用变量所调用,可以提高程序的可扩充性和可维护性。


2. 重载和重写的区别

重载:

多个方法有相同的名字、不同的参数(参数数量、参数类型),便产生了重载。编译器必须挑选出具体执行那个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值进行匹配来挑选出相应的方法。Java 语言容许重载任何方法,一个很典型的例子就是我们在给一个类写构造方法时,往往会写两个构造方法,一个有参构造方法,一个无参构造方法,这时我们在调用不同构造方法创建对象时,就产生了重载。

注意:重载的方法要求方法签名不同(方法名、参数类型),而返回值不是方法签名的部分。

重写:

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 要求返回值和形参都不能改变。重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

重写规则:

  • 参数列表与被重写方法的参数列表必须完全相同。
  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为 final 的方法不能被重写。
  • 声明为 static 的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。

3. hash code 的使用

散列码(hash code)是由对象导出的一个整形值,散列码是没有规律的,不同对象的散列码基本上不会相同。

注意点:

  1. 字符串的散列码由内容导出,故字符串相同的,其散列码也相同。
  2. 重新定义 equals 方法,就必须重新定义 hashCode 方法,以便可以将对象插入到散列表中。

作用:

用于散列表(HashMap、HashSet)判断两个对象是否重复

其判断重复的规则如下:

  1. 首先判断两个对象的hashCode是否相等。如果不相等,认为两个对象也不相等,结束。
  2. 如果相等,则判断两个对象用 equals 运算是否相等,如果不相等,认为两个对象也不相等;如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)

这也解释了为什么重写 equals 方法,一定要重写 hashCode 方法。


4. ArrayList 和 LinkedList 的区别

  1. ArrayList 基于数组实现,LinkedList 基于双向链表实现。

  2. 对于随机访问,ArrayList优于LinkedList,ArrayList可以根据下标以O(1)时间复杂度对元素进行随机访问。而LinkedList的每一个元素都依靠指针和它的后一个元素连接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)

  3. 对于插入和删除操作,LinkedList 优于 ArrayList,因为当元素被添加到ArrayList 中时还需要重新计算大小并且更新索引。。

  4. LinkedList 比ArrayList 更占内存,LinkedList的节点除了存储数据,还想要存储了两个引用(指针),一个指向前一个元素,一个指向后一个元素。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值