当前位置: 代码迷 >> Java面试 >> 关于承袭的一道试题苦逼无分求解答啊
  详细解决方案

关于承袭的一道试题苦逼无分求解答啊

热度:3876   发布时间:2013-02-25 21:26:16.0
关于继承的一道试题苦逼无分求解答啊~
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为什么还会被调用??求解释啊啊,拜谢了~该回复于2012-09-22 11:23:03被版主删除楼主手动DEBUG一下就知道了 。嗯嗯,挺有道理的,不过@override是什么??我的理解是
  首先可以看到t.printAB()这个方法是父类的,调用这个方法的时候会先执行父类的方法,如果子类重写了才会去执行子类的,
  在父类定义的private的方法在子类肯定不存在重写那么只有调用父类的 而定义的 protected 方法被子类重写那么相当于父类方法被覆盖 所以结果显而易见了! 你不妨把这些修饰符多换下看是不是想要的结果!
引用:
我的理解是
  首先可以看到t.printAB()这个方法是父类的,调用这个方法的时候会先执行父类的方法,如果子类重写了才会去执行子类的,
  在父类定义的private的方法在子类肯定不存在重写那么只有调用父类的 而定义的 protected 方法被子类重写那么相当于父类方法被覆盖 所以结果显而易见了! 你不妨把这些修饰符多换下看是不是想要的结果!


同意。
LZ可以在方法上加上@Override
你会看到 class Two method printB 直接被IDE报出ERROR。终于弄明白了。谢谢各位!同意一楼The method printB() from the type Two is never used locally标识此方法重载 如果不是重载的会出编译时异常。protected:继承权限
private:私有权限 

好好看看基础。跟方法的访问权限有关,protected void printA(),所以被覆盖掉了,所以会调用Two的方法,但是private void printB()是One私有的,所以不会被继承覆盖,而AB方法中调用的自然就是One中的B方法了
  相关解决方案