首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java面试 >

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

2012-12-14 
关于继承的一道试题苦逼无分求解答啊~public class One {protected void printA(){System.out.println(on

关于继承的一道试题苦逼无分求解答啊~
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 方法被子类重写那么相当于父类方法被覆盖 所以结果显而易见了! 你不妨把这些修饰符多换下看是不是想要的结果!

[解决办法]

引用:
我的理解是
  首先可以看到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被版主删除

热点排行