对以下代码不做其它任何修改,可以将public, protected 或 private中的哪个访问控制符合法的修饰第3行的myMethod() ?如果第3行保留原样,则哪个关键字可以合法的修饰第8行的myMethod() ? 1. class HumptyDumpty 2. { 3. void myMethod() {} 4. } 5. 6. class HankyPanky extends HumptyDumpty 7. { 8. void myMethod() {} 9. } A. 第3行中加入private 或不做改动。第8行中加入protected 或public或不做改动。 B. 第3行中加入public或protected。第8行中加入private 或不做改动。 C. 第3行中加入protected或public或不做改动。第8行中加入private 或不做改动。 第3行中加入public。第8行中加入private。
本题的答案为A,子类在继承父类时,子类方法的权限修饰符的权限不能低于父类中方法的修饰符。我对答案没有异议,但是在理解上有一些不清楚。
子类继承父类,子类的构造中默认有super(),说明子类在运行过程中需要调用父类中的成员。
按这样的理解,父类中的方法需要被子类调用,而子类中的内容父类不需要调用,那应该是父类中方法的权限大于子类啊,为什么要求子类的权限反而要大于父类中的权限,请帮忙分析其中的底层执行过程。 |