黑马程序员技术交流社区
标题:
为什么输出结果不同——多态中成员变量
[打印本页]
作者:
天天学习
时间:
2013-12-24 20:28
标题:
为什么输出结果不同——多态中成员变量
本帖最后由 天天学习 于 2013-12-26 22:37 编辑
代码1:
class Fu
{
int i;
Fu()
{
i = 5;
}
}
class Zi extends Fu
{
int i;
Zi(int i)
{
this.i = i;
}
}
class Test
{
public static void main(String[] args)
{
Fu f = new Zi(3);
System.out.println(f.i);
}
}
复制代码
代码2:
class Fu
{
int i;
Fu()
{
i = 5;
}
}
class Zi extends Fu
{
Zi(int i)
{
this.i = i;
}
}
class Test
{
public static void main(String[] args)
{
Fu f = new Zi(3);
System.out.println(f.i);
}
}
复制代码
代码1打印为5,而代码2打印3而不打印5,具体原因是什么?
作者:
kun1990
时间:
2013-12-24 22:31
首先,Zi 继承了Fu ,int i 是public的即,Zi也是可以继承的,new Zi(3)此时就给了 i 赋值,因为new的时候没有使用的是无参构造,所以,不会执行Fu()这一构造
作者:
jing迪
时间:
2013-12-24 23:05
第一题子类有自己的成员变量i所以不用父类的
第二题子类没有自己的成员变量,继承的父类的成员变量所以把i修改成3
作者:
Zenith
时间:
2013-12-25 11:33
Zi继承Fu 相当于Fu 里的东西Zi都有 那么new Zi(3),就会在Zi里找带参构造,this 代表的是本类的对象.把子的参数3赋值给了Fu中的变量i.就把Fu里的东西都放Zi 里就清楚了
作者:
Zenith
时间:
2013-12-25 11:36
就把Fu里的东西 全部放Zi 里
你就能看清楚了
this代表的是本类的变量
带参构造Zi(3)
就是把3赋值给了 Fu 中的变量i
作者:
静心远行
时间:
2013-12-26 11:45
对于代码1,我曾经看到过这样的解释:声明父类对象用子类进行实例化时,这个被声明的对象是一个父类对象,但是它指向了子类的引用,它的属性保留的是父类里边的属性,但是它调用的却是子类里边的方法,即f的属性i
作者:
静心远行
时间:
2013-12-26 11:46
接上,属性i是用的父类中的i
作者:
静心远行
时间:
2013-12-26 11:50
代码2:我感觉是因为子类的构造方法zi(int i)中执行this.i=i是发现子类中没有i这个属性,所以默认把i的值赋给了父类中的i.------我也在学习,仅供参考。
作者:
戴荣辉
时间:
2013-12-26 13:28
代码一 成员变量无论编译和运行,都参考左边 所以是5 而代码二因为子类继承了父类中的i 那么修改成3
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2