重写和重载及其区别

          我们先来认识一下重写和重载。

一.重载(overload)

           在同一个类中,只要方法的方法名相同,那么这几个方法就构成重载。重载方法的参数类型和参数个数可以不同,

返回值的类型也可以不同,无法根据返回值类型来判断一个方法是不是重载方法。重载方法的权限可以是是任意权限,

这是没有要求的。

           构造方法的重载:只需要看参数即可,如果想在一个构造方法中调用另一个构造方法,那么可以使用this()的方

法调用,this()括号中的参数表示目标构造方法的参数,this()必须要作为构造方法的第一跳语句,换句话说,this()之前

不能有任何可执行的代码。

二.重写(override

           重写方法的方法名和方法参数(参数数量,参数类型)必须完全一致。在java 1.5版本之前,重写方法的返回值必须

和原方法的返回值类型完全一样。而在1.5版本之后,java 放宽了这一要求,重写方法的返回值类型比原方法的返回值类

型小即可。重写方法抛出的异常,不能大于原方法抛出的异常。重写方法的权限不能小于原方法的权限。重写方法只能发

生在父类和子类之间。

            简单来说,重写方法的规则就是两同,两小,一大。

重写要注意的问题:

             1)声明为final的方法不能被重写。

             2)static的方法不能被重写,但是能够被继承。

             3)构造方法不能被重写,因为构造方法是属于类的。

             4)子类要想重写,就要先继承,怎么 才能继承呢?这就要考虑权限的问题。private的方法除了本类对外屏蔽,

不能继承,也就不能重写。defalt 只能当子类和父类在同一包下才可以继承,然后重写。protected和public 修饰的方法

子类全都可以继承并且重写。

三.重写和重载的区别

            1)重写发生在父类和子类之间,重载发生在同一个类中。

            2)重写方法的权限必须大于等于原方法的权限,重载方法的权限可以是任意的。

            3)重写方法的返回值类型必须小于原方法的返回值类型,重载方法的返回值类型是任意的。

            4)重写方法的方法名和方法参数必须完全一致,重载方法的方法名要相同,而方法参数要不同。

            5)静态方法不可以重写,但是静态方法可以被重载。

            6)   前者实现的是运行时的多态性,而后者实现的是编译时的多态性

猜你喜欢

转载自blog.csdn.net/qq_41160264/article/details/81196340
今日推荐