重写和重载的概念

重写:是子类对父类中允许访问的的方法的重新编写
重载:是同一类中方法名相同,但返回值类型或参数有所不同的方法的重新加载

重写(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;
	}
注意事项
  • 重载的方法必须改变参数列表(参数个数或类型不一样)
  • 重载的方法可以改变返回类型,访问修饰符
  • 方法能够在同一个类中或者在一个子类中被重载

重载和重写的区别

区别点

重载方法

重写方法

方法名

相同

相同

返回值类型

可以修改

相同

参数

参数不同或参数顺序不同

相同

访问修饰符权限

没有要求

被重写的方法权限不得比父类严格

范围

同一类中

在继承中