1、方法重载
定义:方法名称相同,参数列表不同(参数的类型、顺序或个数不同)。
举个例子:
public class Test {
public static void main(String[] args) {
System.out.println(add(5,5));
System.out.println(add(3,4,5));
}
public static int add(int x,int y){
return x+y;
}
public static int add(int x,int y,int z){
return x+y+z;
}
}
2、方法覆写
如果子类定义了与父类相同的方法或属性时,这样的操作就称为覆写(Override)。
方法的覆写:
子类定义了与父类方法名称、参数类型及个数完全相同的方法,但是被覆写不能拥有比父类更严格的访问控制权限。
class Person {
public void print() {
System.out.println("1、[Person]类的print方法");
}
}
class Student extends Person {
public void print() {
System.out.println("2、[Student]类的print方法");
}
}
public class Test {
public static void main(String[] args) {
new Student().print();
}
}
注意:
1)要明确当前使用的对象是通过哪个类new的
2)当调用某个方法时,如果该方法已经被子类覆写了,那么调用的一定是被覆写过的方法
3)访问控制权限:private<default<public
4)一般建议写方法的时候使用public,写属性使用private
问题:
如果父类方法使用private定义,子类使用public覆写,对吗?
class Person {
public void fun(){
this.print();
}
private void print() {
System.out.println("1、[Person]类的print方法");
}
}
class Student extends Person {
public void print() {
System.out.println("2、[Student]类的print方法");
}
}
public class Test {
public static void main(String[] args) {
new Student().print();
}
}
在上面这个例子中,父类的print方法使用private定义,那么就表示该方法只能被父类使用,子类无法使用(子类根本不知道父类有这样的方法)。而子类中的print方法只是子类定义的新方法,与父类没有任何关系。
3、请解释重载(overload)和覆写(override)的区别
- 概念
重载是方法名称相同,参数列表不同(参数的类型、个数不同),与返回值无关;覆写是方法名称、返回值类型、参数列表完全相同。 - 范围
重载是在一个类中,覆写存在继承关系。 - 限制
重载没有权限要求,覆写要求被覆写的方法不能拥有比父类更加严格的访问控制权限。