【发布时间】:2019-11-14 12:41:42
【问题描述】:
我正在尝试理解多态性和继承。所以我写了一些代码并试图追溯发生了什么。
我只是不明白为什么最后三个方法不打印“B”。对象的引用变量始终是 Top,参数始终是扩展 Top 的类的对象。如果最后三种方法打印 C、K 和 X:不应该 tm.m(mm);打印一个 J? 没看懂,谁能解释一下?
public class polymorphie
{
class Top
{
public void m( Top p ) { System.out.print("B"); }
public void m( Bottom p ) { System.out.print("C"); }
}
class Middle extends Top
{
public void m( Bottom p ) { System.out.print("K"); }
public void m( Middle p ) { System.out.print("J"); }
}
class Bottom extends Middle
{
public void m( Middle p ) { System.out.print("W"); }
public void m( Bottom p ) { System.out.print("X"); }
}
public void run()
{
Top tt = new Top();
Top tm = new Middle();
Top tb = new Bottom();
Middle mm = new Middle();
Middle mb = new Bottom();
Bottom bb = new Bottom();
tt.m(tt); // B
tt.m(tm);
tt.m(tb);
tt.m(mm);
tt.m(mb);
tm.m(tt);
tm.m(tm);
tm.m(tb);
tm.m(mm); // why not J?
tm.m(mb);
tb.m(tt);
tb.m(tm);
tb.m(tb);
tb.m(mm);
tb.m(mb);
System.out.println();
tt.m(bb); // C
tm.m(bb); // K
tb.m(bb); // X
}
}
【问题讨论】:
-
您可以将完整的输出添加到您的帖子中吗?我发布了一个答案,但在我意识到我看错后删除了,这导致了更多问题。
-
输出为 BBBBBBBBBBBBBBB C K X
标签: inheritance polymorphism extend