哪三项陈述属实? (选择三项。)
一个。当且仅当X为X时,X类中的最终方法才是抽象的 抽象。
B中。类X中的受保护方法可以被任何子类覆盖 X
℃。私有静态方法只能在其他静态中调用 类X中的方法。
d。可以重写X类中的非静态公共final方法 X的任何子类。
电子。类X中的公共静态方法可以由X的子类调用 没有明确引用类X。
F。与类中的私有final方法具有相同签名的方法 X可以在X的子类中实现。
-G。 X类中的受保护方法可以被X的子类覆盖 只有当子类与X在同一个包中时才会。
这个问题来自SCJP。答案是BEF
我理解BE但是F说这个方法是“私有最终”,那么子类如何覆盖这个方法,因为它被定义为final和private方法。
请清除F点。
答案 0 :(得分:4)
答案F不是覆盖的示例,它是方法范围的示例。在类中声明为private
的方法对于该类的子类是不可见的,因此没有重叠;子类没有在超类中看到它可以覆盖的方法。具有自己的方法void foo(int)
的子类完全不知道超类的private void foo(int)
。
答案 1 :(得分:3)
我理解BE但是F说这个方法是“私有最终”,那么子类如何覆盖这个方法,因为它被定义为final和private方法。
这个问题并未说明有关超越的问题。因为私有方法仅存在于该类的上下文中,所以它不参与重载。您不能覆盖私有方法,因为无论如何都不会从定义它们的类外部看到私有方法。
另一种看待的方式是它们是两种不相关的方法,它们的签名是完全相同的。
由于子类中的私有方法不会超越超类中的私有方法,因此final
关键字无效。