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

yh0123123 2012-09-20 01:30:10
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为什么还会被调用??求解释啊啊,拜谢了~
...全文
177 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
安特矮油 2012-09-21
  • 打赏
  • 举报
回复
跟方法的访问权限有关,protected void printA(),所以被覆盖掉了,所以会调用Two的方法,但是private void printB()是One私有的,所以不会被继承覆盖,而AB方法中调用的自然就是One中的B方法了
yh0123123 2012-09-21
  • 打赏
  • 举报
回复
终于弄明白了。谢谢各位!
朱超ZhuChao.Tech 2012-09-21
  • 打赏
  • 举报
回复
The method printB() from the type Two is never used locally
朱超ZhuChao.Tech 2012-09-21
  • 打赏
  • 举报
回复
楼主手动DEBUG一下就知道了 。
balabala_sean 2012-09-20
  • 打赏
  • 举报
回复
protected:继承权限
private:私有权限

好好看看基础。
memoryshy 2012-09-20
  • 打赏
  • 举报
回复
同意一楼
良sama 2012-09-20
  • 打赏
  • 举报
回复
标识此方法重载 如果不是重载的会出编译时异常。
yh0123123 2012-09-20
  • 打赏
  • 举报
回复
嗯嗯,挺有道理的,不过@override是什么??
maxpower____ 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
我的理解是
首先可以看到t.printAB()这个方法是父类的,调用这个方法的时候会先执行父类的方法,如果子类重写了才会去执行子类的,
在父类定义的private的方法在子类肯定不存在重写那么只有调用父类的 而定义的 protected 方法被子类重写那么相当于父类方法被覆盖 所以结果显而易见了! 你不妨把这些修饰符多换下看是不是想要的结果!
[/Quote]

同意。
LZ可以在方法上加上@Override
你会看到 class Two method printB 直接被IDE报出ERROR。
liu4626846 2012-09-20
  • 打赏
  • 举报
回复
我的理解是
首先可以看到t.printAB()这个方法是父类的,调用这个方法的时候会先执行父类的方法,如果子类重写了才会去执行子类的,
在父类定义的private的方法在子类肯定不存在重写那么只有调用父类的 而定义的 protected 方法被子类重写那么相当于父类方法被覆盖 所以结果显而易见了! 你不妨把这些修饰符多换下看是不是想要的结果!

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧