重载和重写/覆盖:
重载(overload):
Java重载是发生在本类中的,允许同一个类中,有多个同名方法存在,方法名可以相同,方法参数的个数和类型不同,即要求形参列表不一致。重载的好处,减轻了起名和记名的麻烦,通过个数和类型的不同来区分不同的函数。
方法的重载只跟方法名和形参列表有关,与修饰符和返回值类型无关。
形参列表不同:1.顺序不同;2.个数不同;3.类型不同。
基本数据类型传递的是该数据值本身,引用数据类型传递的是对象的引用,而不是对象本身;
重写(override):
重写的参数列表,返回类型(可以是父子类),访问限定符,一般是不能修改的。
重写也称覆盖。重写是子类对父类非静态,非private,非final方法的实现过程进行重新编写,返回值(JDK7以后,被重写的方法返回值类型可以不同,但是必须是具有父子关系的)和形参都不能改变。即外壳不变,核心重写。
重写是动态绑定,即在编译时不能确定具体的调用方法,而在程序运行时,才能确定具体的被调用的方法。即:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
哪些方法可以被重写?哪些方法不可以被重写?
一:只能重写继承过来的方法。
二:final、static 的方法不能被重写。(父类被static、private final修饰的方法不能被重写。)
三:重写的方法必须有相同的参数列表。
四:重写的方法必须返回相同的类型。(子类在重写父类的方法时,一般必须与父类方法原型一致:修饰符 返回值类型 方法名(参数列表) 要完全一致)
五:重写方法不能使用限制等级更严格权限修饰符。(访问权限不能比父类中被重写方法访问权限更低)
六:重写后的方法不能抛出比父类中更高级别的异常。
七:可以在子类中通过 super 关键字来调用父类中被重写的方法。
八:构造方法不能被重写。(因为构造方法很特殊,而且子类的构造方法不能和父类的构造方法同名(类名不同),所以构造方法和重写之间没有任何关系。)