关于继承的一道试题苦逼无分求解答啊~ public class One {
protected void printA()
{System.out.println("one A");}
private void printB()
{System.out.println("one B");}
protected void printAB()
{printA();printB();} }
public class Two extends One {
protected void printA()
{System.out.println("two A");}
private void printB()
{System.out.println("two B");}
public static void main(String[] args)
{ Two t = new Two(); t.printAB();} }
结果是:
two A
one B
不太理解为什么这样子,父类的printB()是private为什么还会被调用??求解释啊啊,拜谢了~ ------解决方案-------------------- 我的理解是
首先可以看到t.printAB()这个方法是父类的,调用这个方法的时候会先执行父类的方法,如果子类重写了才会去执行子类的,
在父类定义的private的方法在子类肯定不存在重写那么只有调用父类的 而定义的 protected 方法被子类重写那么相当于父类方法被覆盖 所以结果显而易见了! 你不妨把这些修饰符多换下看是不是想要的结果!
------解决方案--------------------
同意。
LZ可以在方法上加上@Override
你会看到 class Two method printB 直接被IDE报出ERROR。 ------解决方案-------------------- 嗯嗯,挺有道理的,不过@override是什么?? ------解决方案-------------------- 标识此方法重载 如果不是重载的会出编译时异常。 ------解决方案-------------------- 同意一楼 ------解决方案-------------------- protected:继承权限
private:私有权限
好好看看基础。 ------解决方案-------------------- 跟方法的访问权限有关,protected void printA(),所以被覆盖掉了,所以会调用Two的方法,但是private void printB()是One私有的,所以不会被继承覆盖,而AB方法中调用的自然就是One中的B方法了 ------解决方案-------------------- 楼主手动DEBUG一下就知道了 。 ------解决方案-------------------- The method printB() from the type Two is never used locally ------解决方案-------------------- 终于弄明白了。谢谢各位! ------解决方案-------------------- 该回复于2012-09-22 11:23:03被版主删除