1.重写(Override)是发生在当一个子类继承一个父类的时候,可以重写覆盖原来父类里面的方法,这个方法和父类的方法名称一定要相同,参数也要相同,不然就不叫重写了。注意:有final修饰的方法不可以重写。”
例如:
public class Fu{
public static void main(String[] args) {
Zi z = new Zi();
z.sayHi();
}
public void sayHi() {
System.out.println("Hello");
}
}
class Zi extends Fu{
@Override
public void sayHi() {
System.out.println("bay bay");
}
}
重写 总结:
1)重写后的方法访问权限(public protected 默认 private)需与父类相同或大于父类
2)父类中final、static修饰的方法,不允许被重写,但可以被继承
3)子类重写的方法,不允许static修饰
4)重写方法可以使用@Override注解
5)重写后的子类方法名必须与父类一致,参数列表除名字外其他必须一致
6)如果父类返回值类型为void或基本数据类型,则重写后的方法必须和父类保持一致
7)如果父类返回值类型为引用类型,则重写后的方法返回值要么与父类一致,要么是父类的子类
2. 重载(Overload)指的是在同一个作用域内,两函数的函数名可以相同,但是参数不能完全相同,可以是参数类型不同或者是参数个数不同,至于返回值,不影响重载。
例如:
public class Fu {
public static void main(String[] args) {
Fu f = new Fu();
f.sayHi();
f.sayHi(20);
}
public void sayHi() {
System.out.println("Hello");
}
public void sayHi(int age) {
System.out.println("今年"+age+"岁");
}
}
重载 总结:
1.同一个类
2.多个方法的方法名字相同
3.参数列表不同
参数个数不同
参数的数据类型不同
不同数据类型的参数顺序不同
方法的重载和修饰符无关
方法的重载和有无返回值无关
方法的重载和返回值类型无关
方法的重载和参数名无关
方法的重载是一个类中多态的一种体现
面试题,问:重载(Overload)和重写(Override)的区别?
答:1、重载发生在本类,重写发生在父类与子类之间;
2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;
3、重载的参数列表不同,重写的参数列表必须相同。