【Java面试题】Overload与Override的区别
2023-03-06 09:18:26
开发期间,您常常会遇到解决方案的不确定性,此时java程序员需要判断该方法更适合当前的项目。所以,在面试过程中,面试官常常利用这些题目来考察面试者解决问题的想法和对知识的掌握情况。接下来,我们将根据Java程序员面试的真题,Overload和Override两种方法的不同,详细阐述一下。
先要理解两个概念:Overload意味着重载,Override意味着覆盖,或者重写。Overload的重载意味着在一个类中可以有多个名为相同的方法,但是这些方法的参数列表是不同的(即参数数目或类型)。覆盖Override表示子类中的方法的名字和参数可以与父类中的方法完全一样,在由子类创建的实例对象调用该方法时,子类中的定义方法被调用,这样做等于在父类中定义的同样的方法被覆盖,这也是面向对象编程多态的一种表现。当子类覆盖父类方法时,它只会引发比父类更少的异常,或者抛出父类引发的异常的子异常,因为子类可以解决父类的某些问题,而不可能比父类有更多的问题。子类方法的访问权只能大于父类的访问权。如果父类的方法是私有的,那么子类就没有覆盖的限制,这就等于在子类中添加了一种全新的方法。
override可以被翻译成覆盖,而且根据字面意思,它覆盖了一个方法,并重写它以获得不同的效果。对于我们来说,最熟悉的是接口方法的实现,在接口中通常只声明方法,而我们在实现时,还需要实现接口声明的全部方法。除这一典型用法外,我们还可以在继承中把子类覆盖到父类中。关于覆盖的一些要点需要注意:
1.方法的覆盖标志要与所覆盖方法的标志完全匹配,以达到覆盖效果;
2.所覆盖方法的返回值必须与所覆盖方法的返回一致;
3.覆盖方法引发的异常必须与被覆盖方法抛出的异常或其子类一致;
4.被覆盖的方法不能是私有的,否则,只有一个方法在其子类中重新定义,并且没有覆盖它。
overload对我们来说可能更熟悉,可以翻译成重载,这是指我们可以定义某些具有相同名称的方法,当定义不同的输入参数并在以后被调用时,VM将以不同的参数风格为基础,选取适当的方法去执行。有几个要点需要注意:
1.使用重载时,只能采用不同的参数样式。比如,不同的参数类型,不同的参数数目,以及不同的参数次序(当然,同一个方法中的几个参数类型必须不相同,如fun(int,float),但不可能是fun(int,int));
2.无法通过访问.返回类型.引发的异常将被重载;
3.异常类型和方法数量对重载没有影响;
4.对于继承,如果某个方法在父类中是priavte,则它不能被重载,如果它被定义为priavte,那么它也只是定义了一种新方法,而不会产生重载。
这些都是基于采访真题对Overload和Override的不同之处。面试时,你会不会遇到类似的问题?Java开发过程中存在各种问题的多个解决方案,但在不同的解决方案中,产生的结果也有所不同。对Java低级程序员而言,首先要了解各种方法如何使用,而对Java中的高级程序员而言,如果能更有效地解决问题,又能保证程序的可扩展性,这将是值得考虑的。