为什么Java中的私有方法隐式最终?

时间:2014-11-22 14:51:56

标签: java override private final

我想在书中指出这一行" Java in a Nutshell"这让我有些困惑:

  

私有方法不是由子类继承的,因此不能被覆盖(即,所有私有方法都是隐式最终的)。

我解释说所有私有方法都是最终的,我理解:

  • 不能覆盖最终方法,但可以从子类调用它们。
  • 无法覆盖私有方法,也无法从子类调用它们。

我的陈述是否正确?

3 个答案:

答案 0 :(得分:2)

  

不能覆盖最终方法,但可以从子类调用它们。

这可能是也可能不是,取决于修饰符,以及覆盖类的位置。如果方法是private或default(无修饰符),那么除非您的子类在同一个包中,否则不能从子类调用该方法。

  

不能覆盖私有方法,也不能从子类调用它们。

真。私有方法无法被覆盖的原因是因为它们无法被看到。但这并不意味着无法覆盖的方法是私有的。

答案 1 :(得分:1)

在我看来,如果你继续考虑这个关键词会有所帮助。

  

私有

这是访问修饰符,它说明哪个类可以看到此方法。 (即只有这个类,子类,包中的其他类)。因此,任何标记为私有的方法只能在同一个类中看到。因此,您的语句是正确的,因为从任何子类都看不到标记为private的方法,更不用说重写或调用了。

  

最终

这表明任何具有此方法{}的内容都无法从外部更改。因此,任何标记为final的方法都不能被覆盖。但是,标记为final的方法可以从其他类调用,具体取决于其访问修饰符。因此,关于final的声明也是正确的,但调用部分再次严格依赖于方法的访问修饰符。

答案 2 :(得分:0)

  

private无法覆盖

     

private无法在外部类中使用,例如子类。

final方法隐含最终,因此您无法覆盖。

{{1}}方法并非总是隐私,因此如果不是私有的话,您可以在子类中进行访问。