package test;class Test2
{
int i = 2;
public void sayHello(Test2 test2)
{
System.out.println(test2.i);
}
}class Test3 extends Test2
{
int i = 3;
public void sayHello(Test2 test2)
{
System.out.println(i);
System.out.println(test2.i);
}
}public class Test{
public static void main(String[] args)
{
Test2 test = new Test3();//将此处改为Test3 test = new Test3();结果也是输出3,2
test.sayHello(test);
}
}
结果为什么输出是3和2而不是3和3呢?实参不是对Test3对象的引用吗?请哪位高手帮忙解析一下,谢谢!
{
int i = 2;
public void sayHello(Test2 test2)
{
System.out.println(test2.i);
}
}class Test3 extends Test2
{
int i = 3;
public void sayHello(Test2 test2)
{
System.out.println(i);
System.out.println(test2.i);
}
}public class Test{
public static void main(String[] args)
{
Test2 test = new Test3();//将此处改为Test3 test = new Test3();结果也是输出3,2
test.sayHello(test);
}
}
结果为什么输出是3和2而不是3和3呢?实参不是对Test3对象的引用吗?请哪位高手帮忙解析一下,谢谢!
解决方案 »
- 为什么重绘JButton后加入到一个JPanel中显示就不正常勒呢
- 请问POI怎么读取word中的自选图形?
- 如何使用JAVA合成两个声音
- 我的第一篇javaBlog,发一个作业,共同进步!~~
- java广域网编程
- java中如何能得到windows中当前活动窗口标题
- 如何在java中调用windows media player 并在客户端显示出来?
- 由Client端应用程序通过HTTP上传文件到服务器
- 我彻底崩溃了,数据库发疯了!!
- 关于JDBC的问题(在线等待)
- 关于set path的问题
- 小弟想做一个类似于windows任务管理器的东西,监控我系统后台的进程,目前没有一点思路,请大神支招....
即对于成员方法来说,调用哪个方法取决于调用者的实际类型,在这里是Test3对象调用的,所以System.out.println(i)打印的是Test3对象的i。
对于变量和静态方法,则不会在继承中被覆盖,因此究竟是哪个变量的i取决于变量的声明,这里参数声明为了Test2,所以会调用Test2中定义的i