1、定义
1、重载:指的是在同一个类中,多个函数或者方法有同样的名称,但是参数列表不相同的情形,
这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
2、重写:指的是在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。
由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。
2、方法重载的条件需要具备以下条件和要求:
1、被重载的方法必须改变参数列表
2、被重载的方法可以改变返回类型
3、被重载的方法可以改变访问修饰符
4、被重载的方法可以声明新的或更广的检查异常
5、方法能够在同一个类中或者在一个子类中被重载。
class Dog{
public void bark(){
System.out.println("woof ");
}
public void bark(int num){
for(int i=0; i<num; i++)
System.out.println("woof ");
}
}
3、方法重写的条件需要具备以下条件和要求:
1、参数列表必须完全与被重写方法的相同
2、返回类型必须完全与被重写方法的返回类型相同
3、访问级别的限制性一定不能比被重写方法的强
4、访问级别的限制性可以比被重写方法的弱
5、重写方法一定不能抛出新的检查异常或比被重写的方法声明的检查异常更广泛的检查异常
6、重写的方法能够抛出更少或更有限的异常(也就是说,被重写的方法声明了异常,但重写的方法可以什么也不声明)
7、不能重写被标示为final的方法
8、如果不能继承一个方法,则不能重写这个方法。
class Dog{
public void bark(){
System.out.println("woof ");
}
}
class Hound extends Dog{
public void sniff(){
System.out.println("sniff ");
}
public void bark(){
System.out.println("bowl");
}
}
public class OverridingTest{
public static void main(String [] args){
Dog dog = new Hound();
dog.bark();
}
}
输出结果:bowl
1、使用父类类型的引用指向子类的对象,该引用只能调用父类中定义的方法和变量;
2、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
3、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。