一、重载
重载指在一个类中有多个同名方法,但通过不同的参数列表可以有不同的表现形式。调用方法时通过参数列表决定调用哪个重载方法。
使用说明:
参数列表不同可以是参数类型不同、参数个数不同和参数顺序不同
判断方法是否重载不能通过返回值类型、权限修饰符、抛出异常大小
重载是一种编译时多态,发生在同一个类中
代码如下:
public class Test {
public static void main(String[] args) {
Person p1 = new Person();
p1.display("a",1);
p1.display(1,2);
p1.display(1,"a");
p1.display("a",1,2);
}
}
class Person {
public void display(String var1,int var2){
System.out.println("原方法");
}
public void display(int var1,int var2) {
System.out.println("改变参数类型");
}
public void display(int var2,String var1){
System.out.println("改变参数顺序");
}
public void display(String var1,int var2,int var3){
System.out.println("改变参数个数");
}
}
原方法
改变参数类型
改变参数顺序
改变参数个数
注意点:
若两个参数类型相同,调换参数顺序时不构成重载
代码如下:
class Person {
public void display(int var1,int var2){
System.out.println("原方法");
}
//编译不通过
public void display(int var2,int var1) {
System.out.println("改变参数顺序");
}
}
二、重写
重写是指子类重写父类继承的方法。
方法重写是一种运行时多态,在编译时并不能确定子类具体的调用方法。
子类重写的方法必须具有和父类相同的方法名和参数列表
使用说明:
重写方法的访问权限要大于等于父类
代码如下:
class Person {
protected void display(){
}
}
class child extends Person{
//编译不通过
@Override
void display(){
}
}
重写方法抛出的异常要小于等于父类
代码如下:
class Person {
protected void display() throws RuntimeException{
}
}
class child extends Person{
//编译不通过
@Override
public void display()throws Exception{
}
}
若父类方法返回值类型为void,子类返回值类型也为void
代码如下:
class Person {
protected void display() {
}
}
class child extends Person{
//编译不通过
@Override
public int display(){
return 0;
}
}
若父类方法返回值类型为基本数据类型,子类要返回相同的数据类型
代码如下:
class Person {
protected int display() {
return 0;
}
}
class child extends Person {
@Override
public int display() {
return 0;
}
}
若父类方法返回值类型为引用数据类型,子类返回的数据类型要小于等于父类的返回值类型
代码如下:
class Person {
protected String display() {
return "";
}
}
class child extends Person {
@Override
public String display() {
return "";
}
}
注意点:
重写只能用于方法,不能用于变量
子类无法重写static、final、private修饰的方法
若父类方法被private修饰,子类继承该父类时,只能拥有这个方法,但无法对这个方法进行调用或者重写。
重写是一种运行时多态。根据运行时生成的对象决定调用的方法,重写的实现依赖于对象。若方法被static修饰,这个方法只跟类相关,跟对象无关。所以无法重写static修饰的方法