(易混点)java中,关于子类继承父类的private方法与final方法

(易混点)java中,关于子类继承父类的private方法与final方法

对于子类继承父类的方法,相信很多人都已经掌握得非常熟悉了,今天由于在做牛客网的一道关于这个知识点的面试题,忽略了一个非常重要的细节,导致入坑了。因此,在这里分享自己的总结:一来是希望可以加深自己的理解,防止再次掉坑,二来也是希望跟大家一起分享,一起学习,有写的不对的地方欢迎大家指正。

以下附上牛客网上的原题

在这里插入图片描述
正确的答案是A

下面我从三个方面进行分析

1.父类中的方法被private修饰,子类中也定义了一个跟父类一样的方法

在这里插入图片描述
这种情况编译和运行都没有问题,运行的结果是输出“son”

2.父类中的方法被final修饰,子类中重写了这个方法
在这里插入图片描述
这种情况编译不通过

3.父类中的方法同时被private和final修饰,子类中也定义了一个跟父类一样的方法
在这里插入图片描述
这种情况编译和运行同样都没有问题,运行的结果也是输出“son”

针对于上面三种不同的情况,所产生不同的结果,在此进行总结:
①父类中被private修饰的方法表示仅在该类可见,所以子类没有继承到父类的private方法,因此,若子类定义了一个与父类的private方法相同的方法名和参数列表也是没问题的,相当于子类自己定义了一个新的方法;

②而父类中被final修饰的方法表示不可以被子类重写,如果没有被private修饰则表示该方法是有被子类继承但是不可以被覆盖,若子类定义了相同的方法则编译无法通过。

③需要注意的点:若父类中的方法是既被private修饰也被final修饰了,那么说明该方法是不会被子类继承,此时子类定义相同的方法也没有问题,不再产生重写与final的矛盾,而是在子类中定义了新的方法。