重载和重写:
1、重载(overload)
1.1、概念 :
简单来说,重载是同一个类内两个同名称但不同参数的方法
之间的关系,重载是相互的(就跟加数和被加数一样)。
1.2、重载的方法的调用:
通过传递不同的参数个数和参数类型来决定具体执行哪个方法。
1.3、案例代码
/*
*1、无参构造和有参构造互为重载
*/
public class Father {
private String name;
private int age;
/*
* 无参构造
* */
public Father() {
super();
// TODO Auto-generated constructor stub
}
/*
* 有参构造
* */
public Father(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
1.3、小结
1、重载是一个类中的多态性的表现。
2、重载的两个方法(函数)之间名称相同,参数不同:这包括参数的个数、顺序。
3、另外,重载的两个方法的返回值类型也可以不同。但是返回值类型不是定义重载方法的标准(重载对返回值类型没有要求)。
4、重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)
2、重写(覆盖)
2.1、概念 :
重写是父类与子类之间的多态性,子类通过重写来实现父类中的功能。
子类重写父类中的方法时必须同名、同参、同返回,而且子类重写的方法访问权限[^public>protected>default>private]不能低于父类。
1、同名、同参、同返回
* 同名: 子类中重新声明的方法的名称与从父类中继承的、可见的方法名称完全相同
* 同参: 子类中重新声明的方法的名称与从父类中继承的、可见的同名方法参数相同
* 同返回:
* 父类方法如果返回 基本类型 或 void ,则子类中重写后的方法返回类型必须与父类方法的返回类型相同
* 如父类方法中如果返回引用类型,则子类重写后的方法返回类型需要与父类方法的返回类型 "同源" ( 相兼容 )
2、重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)。
2.2、案例代码
public class Father {
public void hello() {
System.out.println("hello Father");
}
}
class Son extends Father {
@Override
public void hello() {
System.out.println("hello Son");
}
}
2.3、小结
1、重写的前提是存在继承。
2、方法名称、参数、返回值类型都必须相同。
3、子类中重写的方法的访问修饰符要大于父类的被重写的方法的访问修饰符。
3、重载和重写的区别(面试常问)
回答思路:
3.1、先说相同点
重载与重写是 Java 多态性的不同表现。
3.2、再说不同点
重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)
重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)
构造方法可以被重载,不能被重写(重写要求同名)
被【final】修饰的方法不可以被重写