什么叫做方法的覆写?在上篇我描述了继承的相关知识,就是为讲述方法的覆写做铺垫的,方法的覆写就在继承关系中会产生的。
如果子类定义了与父类相同的方法或属性的时候,这样的操作就称为覆写(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();
}
}
输出结果如下:
那么我们在覆写的时候要注意以下几点:
- 你当前使用的对象是通过哪个类new的。
- 当调用某个方法,如果该方法已经被子类所覆写了,那么调用的一定是被覆写过的方法。
刚刚上面说了覆写不能拥有比父类更严格的访问权,那么在这里先简单说一下访问权的级别,后面会详细解释:private<default<public
什么意思呢?意思就是如果父类的方法访问权限是public,那么子类覆写的时候只能是public。
那么问题来了如果父类是private,那么子类覆写public可以吗?下面我们看个例子:
class Person{
public void fun(){
this.print();
}
//如果现在父类方法使用了private定义,那么就表示该方法只能被父类使用,子类无法使用。换言之,子类根本就不知道父类有这样的方法。
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().fun();
new Student().print();
}
}
结果:
在之前的博客中我有讲到方法的重载,那么在这里整理一下方法重载和方法覆写的区别: