重写( override)and 重载(overload)

重写override:是子类对父类的允许访问的方法的实现过程的重新编写,名字,返回值和形参都不能改变,即外壳不变,内心更改

重载overload:同一个类里面的方法,名字相同而参数不同,返回值可以相同也可以不相同。调用的时候根据传入的参数来匹配调用的方法。最常用的重载就是构造函数。

重写列子:

public class Animal {
String name;
int age;
//在父类里定义了一个方法move()
public void move(){
System.out.println("I can run");
}
}
public class Dog {
  //在子类里重写方法move(),更改实现过程
public void move(){
System.out.println("i am a dog, i can run very fast");
} public static void main(String[] args){
Animal a = new Animal();
Dog b = new Dog();
a.move();
b.move();
}
}

运行结果

I can run
i am a dog, i can run very fast

重写的规则:

参数列表必须与被重写的方法相同

返回值类型必须相同

访问权限不能比父类中方法的权限低。如如果在父类中的访问权限是public,在子类中不能改写成protected

父类的成员方法只能被子类重写

声明为static的方法不能被重写,但是能被再次声明

子类和父类在同一个包中,子类可以重写父类的所有方法,除了private和final的方法

子类和父类不在同一个包中,子类只能重写父类中public和protected的非final方法

重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

构造函数不能被重写

重载列子:对方法move()进行重载,传入不同的参数,可以有不同的返回值类型

public class Dog {
public void move(){
System.out.println("i am a dog, i can run very fast");
}
public String move(String name){
return name;
} public int move(int i){
return i;
} public static void main(String[] args){
Animal a = new Animal();
Dog b = new Dog();
a.move();
b.move();
}
}

重载的规则

每一个重载的方法或者构造函数都必须有不同的参数列表(类型,个数,顺序)

最常用的重载是构造函数

被重载的方法可以改变返回值,访问权限

被重载的方法可以声明新的或者更广的检查异常,但是不能声明更广的强制异常

方法可以在同一个类中或者子类中被重载

上一篇:CS229 笔记07


下一篇:Maven的porfile与SpringBoot的profile结合使用详解