【JAVA面试题】Java的Override和Overload

几乎是所有初级的程序员必考的面试题,override和overload,中文也就是重写和重载。

【JAVA面试题】Java的Override和Overload_第1张图片

Override,重写,意思是父类和子类两个方法拥有相同的方法名和参数列表。子类的方法允许将父类同名方法的实现给覆盖,在上图中也就是Hound(猎犬)的吼叫方法覆盖了父类Dog类的吼叫方法。

Overload,重载,指的是同一个类方法名相同,参数列表不同的函数,可以通过传参的不同执行不同的函数。

所以简单地说,重写发生在两个类之间的,而重载是发生在一个类里面的。

到这你就觉得你学会了吗?一般的书籍上指挥介绍到这,可是面试的时候则会复杂很多。

做几个小小的面试题,看看对于一个问题你的思考有没有深入。

Main方法可以重载吗?

可以,但是只能是这样的public static void main(String[] args)。

重载的时候可以只更改return type吗?

不可以,很简单的道理,编译器没法知道你要调用哪个函数。

Override的规则是什么样子的?

ArgumentsMust not change

Return typeCan’t change except for covariant (subtype) returns

Access ModifierMust not be more restrictive. Can be less restrictive.

ExceptionsCan reduce or eliminate but must not throw new/broader checked exceptions

ContructorCan not be overridden

Static methodCan not be overridden

final methodCan not be overridden

final方法可以override吗?

显然不可以,final的定义就是不希望你override。

static的方法可以override吗?

不行,因为static的方法是属于类本身的。你可以子类里有个相同函数名,但是事实上这不会发生override的行为当你调用的时候。

static binding是什么?

overload的行为会在java编译器编译的时候发生,编译器会把最终需要调用的那个函数替换掉你代码里的函数。

对应的dynamic binding发生了什么呢?

override的行为是动态绑定的。

是不是有很多地方可以考呢,所以这么一个小概念还是要多多思考,当然c++和java也不同,对于override overload还有细微的差别,各位可以关注之后的文章。

你可能感兴趣的:(【JAVA面试题】Java的Override和Overload)