重写和重载的概念
重写:是子类对父类中允许访问的的方法的重新编写
重载:是同一类中方法名相同,但返回值类型或参数有所不同的方法的重新加载
重写(Override)
重写是父类于子类的多态性(运行时多态),实质是对父类的方法重新定义。
父类中的方法不能满足现有功能的需求,就需要子类重写父类方法; (即外壳不变,核心重写)
class Animal {
public void eat() {
System.out.println("动物吃东西");
}
}
class Cat extends Animal {
// 重写父类eat()方法
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Test {
public static void main(String[] args) {
Cat dog = new Cat ();
Cat.eat();
}
}
注意事项
- 声明为final的方法不能被重写
- 声明为static的方法可以被再次声明,但不能被重写
- 子类和父类在同一包中时,子类可以重写父类中除了声明为private或final的其他所有方法
- 子类和父类不在同一包中时,子类只能重写父类中声明为public或protected的非fnial方法
- 构造方法不能被重写
重载(Overload)
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。
public class Demo {
//一个普通得方法,不带参数,无返回值
public void add(){
//method body
}
//重载上面的方法,并且带了一个整形参数,无返回值
public void add(int a){
//method body
}
//重载上面的方法,并且带了两个整型参数,返回值为int型
public int add(int a,int b){
//method body
return 0;
}
注意事项
- 重载的方法必须改变参数列表(参数个数或类型不一样)
- 重载的方法可以改变返回类型,访问修饰符
- 方法能够在同一个类中或者在一个子类中被重载
重载和重写的区别
区别点 | 重载方法 | 重写方法 |
方法名 | 相同 | 相同 |
返回值类型 | 可以修改 | 相同 |
参数 | 参数不同或参数顺序不同 | 相同 |
访问修饰符权限 | 没有要求 | 被重写的方法权限不得比父类严格 |
范围 | 同一类中 | 在继承中 |