一道关于继承的测试题

jonay 2009-12-15 10:51:13

public class T {
static class t1 {
public int i = 5;

public int printA() {
return i;
}
}

static class t2 extends t1 {
public int i = 100;

public int printB() {
return i;
}

public void printC() {
{
System.out.println(super.i);
}
}
}

public static void main(String... args) {
t1 t = new t1();
t2 tt = new t2();
tt.printC(); //5
System.out.println(tt.printB()); //100
System.out.println(t.printA()); //5
System.out.println(tt.printA()); //5 不明白这里为啥是5而不是100?
t1 ttt = (t1) tt;
System.out.println(ttt.printA());//5
}

}
...全文
76 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
J10FX 2009-12-15
  • 打赏
  • 举报
回复
调用的方法是父类时候,如果子类没重写就按父类来调
sunwxb 2009-12-15
  • 打赏
  • 举报
回复
“System.out.println(tt.printA()); //5 不明白这里为啥是5而不是100?”

虽然tt属于t2类的实例,但是t2继承了t1中的方法int printA();t1中的成员变量又是public的(通常设置为private),所以,在tt.printA()时,会返回t1中定义的域值5。
scarjia 2009-12-15
  • 打赏
  • 举报
回复

public class T {
static class t1 {
public int i = 5;

public int printA() {
System.out.println("t1.printA()");
return i;
}
}

static class t2 extends t1 {
public int i = 100;
public int printB() {
System.out.println("t2.printA()");
return i;
}

public void printC() {
{
System.out.println(super.i);
}
}
}

public static void main(String... args) {
t1 t = new t1();
t2 tt = new t2();
tt.printC(); //
System.out.println(tt.printB()); //
System.out.println(t.printA()); //
System.out.println(tt.printA()); //
t1 ttt = (t1) tt;
System.out.println(ttt.printA());//
}
}

结果是这样的,现在能理解了吧?
5
t2.printA()
100
t1.printA()
5
t1.printA()
5
t1.printA()
5

62,615

社区成员

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

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