Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Override和重载Overload是Java多态性的不同表现。重写Override是父类与子类之间多态性的一种表现。重载Overload是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,那么我们说该方法被重写了。子类的对象使用这个方法时,将调用子类中的定义。对子类而言,父类中的定义如同被“屏蔽”了一样。关于重载,如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,也就是参数签名不同,这种情况出现方法的重载。重载的方法是可以改变返回值的类型。


扩展:

区分重载方法

一个类中要是有多个相同名字的方法,Java如何才能知道你指的是哪一个呢?其实规则很简单,每个重载的方法都必须有一个独一无二的参数类型列表。甚至参数顺序的不同也足以区分两个方法。但是一般情况下别这么做,因为这会使代码难以维护。

说到这,可能会有这样的想法:“在区分重载方法的时候,为什么只能以类名和方法的形参列表作为标准呢?能否考虑用方法的返回值来区分呢?”比如下面两个方法,虽然它们有相同的名字和形式参数,但却很容易区分它们:

void method(){}

int method(){return 1;}

只要编译器可以根据语境明确判断出语义,比如int x=method()中,那么的确可以据此区分重载方法。不过,有时你并不关心方法的返回值,你想要的是方法调用的其他效果,这是你可能会调用方法而忽略方法的返回值。所以,如果像下面这样调用方法:

method();

此时Java如何才能判断调用哪一个method()方法呢?别人该如何理解这种代码呢?因此,根据方法的返回值来区分重载方法是行不通的。

你可能感兴趣的:(面试)