重载(overload)和重写(override)的区别
重载和重写是Java多态性的不同表现方式。
重载是在一个类中多态性的一种表现,是指在一个类中定义了多个同名的方法,但是他们有不同的参数个数或有不同的参数类型。
在使用重载时要注意以下几点:
- 重载只能通过不同的方法参数来区分。例如不同的参数类型,不同的参数个数,不同的参数顺序。
- 不能通过访问权限、返回类型、抛出的异常进行重载。
重写是指子类函数重写父类中的函数。
在重写时要注意以下几点:
- 重写的方法的函数名和参数必须要和被重写的方法的函数名和参数完全匹配,才能达到重写的效果;
- 重写的方法的返回值必须和被重写的方法的返回值类型一致;
- 重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
- 被重写的方法不能为private,否则在其子类中只是定义了一个新方法,并没有对其进行重写。
- 子类函数的访问修饰权限要大于等于父类(public > protected > default > private)
Java中,子类无法重写父类的static方法或者private方法。
class Parent{
public static void p(){
System.out.println("parent...");
}
}
public class Demo extends Parent(){
public static void p(){
System.out.println("child...");
}
public static void main(String[] args){
Parent parent = new Demo();
parent.p();
}
}
输出:
parent
Java中,子类无法重写父类的static方法或者private方法。
一张图简单明了