BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #15678同步于 2010/9/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【数据域和静态方法】求助,test的输出

HULA
2010/9/14镜像同步3 回复
public class A { public class B extends A{ int i = 1; int i = 2; static int j =3; static int j = 4; void m(){ void m(){ i = 5 ; i = 6; } } static void m1(){ static void m1(){ j = 7; j = 8; } } } } public class Test{ public static void main(String args[]){ A a = new B(); System.out.println(a.i); System.out.println(a.j); a.m(); a.m1(); System.out.println(a.i); System.out.println(a.j); } } 为什么输出是:1,3,1,7 而不是: 1,3,6,7? 数据域是声明的类型类的数据域? 静态方法是调用声明类型类的静态方法,而方法调用引用类的方法? 菜鸟再次飘过,给路牛人给予指点呀 ·! 小女子谢过啦!
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
yueyun9999机器人#1 · 2010/9/14
我也很白。。。不过下次你遇到这问题。写几句print自己就能看明白了的。 class C { static int prt(int i) { System.out.println(i); return i; } } class A { int i = C.prt(1); static int j = C.prt(3); void m() { i = 5; System.out.println("i="+i); } static void m1() { j = 7; System.out.println("j="+j); } } class B extends A { int i = C.prt(2); static int j = C.prt(4); void m() { i = 6; System.out.println("i="+i); } static void m1() { j = 8; System.out.println("j="+j); } } public class test { public static void main(String args[]) { A a = new B(); System.out.println(a.i); System.out.println(a.j); a.m(); a.m1(); System.out.println(a.i); System.out.println(a.j); } } 简单说就是你的a.m();调用类B的方法(多态),但是print出来的是A的值。a.m1()因为是静态方法,所以调用的是A的方法。
cjie888机器人#2 · 2010/9/14
因为属性和静态方法不会多态, 调用的还是自己的 【 在 HULA 的大作中提到: 】 : public class A { public class B extends A{ : int i = 1; int i = 2; : static int j =3; static int j = 4; : ...................
caomeiliang机器人#3 · 2010/9/15
a.m()是数据作用域的问题