java方法覆写(Override) 覆写与重载的区别(面试)

什么叫做方法的覆写?在上篇我描述了继承的相关知识,就是为讲述方法的覆写做铺垫的,方法的覆写就在继承关系中会产生的。

如果子类定义了与父类相同的方法或属性的时候,这样的操作就称为覆写(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. 当调用某个方法,如果该方法已经被子类所覆写了,那么调用的一定是被覆写过的方法。

刚刚上面说了覆写不能拥有比父类更严格的访问权,那么在这里先简单说一下访问权的级别,后面会详细解释:private 什么意思呢?意思就是如果父类的方法访问权限是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();
    }
}

结果:
在这里插入图片描述

在之前的博客中我有讲到方法的重载,那么在这里整理一下方法重载和方法覆写的区别:
java方法覆写(Override) 覆写与重载的区别(面试)_第1张图片

你可能感兴趣的:(JAVA)