黑马程序员技术交流社区
标题: 继承问题 [打印本页]
作者: 殷婷婷 时间: 2013-8-8 13:04
标题: 继承问题
class Fu
{
int x = 10;
}
class Zi extends Fu
{
Zi()
{
x=8;
}
x=34;
}
class Example
{
publicstatic void main(String[] args)
{
Fuf = new Zi();
System.out.println(f.x);
}
}
碰到了个小问题,为什么我在子类构造函数中写x=8是正确的,而在构造函数外写了个x=34就编译错误了呢?子类不是继承了父类的x吗?难道不能直接用吗?
作者: 天涯海角 时间: 2013-8-8 17:34
如果子类中出现了非私有的同名成员变量时,子类要要访问本类中的变量用this,要访问父类中的同名变量用super。而且你的代码也写错了,下面是我写的你对照一下:
class Fu
{
int x = 10;
}
class Zi extends Fu
{
Zi()
{
int x=8;
}
int x=34;
}
class Example
{
publicstatic void main(String[] args)
{
Zi z = new Zi();
System.out.println(super.x);
}
}
作者: 柳小龙 时间: 2013-8-8 18:30
顶楼上一下。。。当一个类继承了一个父类时,如果想要访问自己的方法或变量时,用this关键字;如果想访问父类的的属性和方法时,用super关键字。。并且在构造方法或其他成员方法内,引用自己的变量时,默认会自动会给变量加上this。
在 Zi extends Fu后,Zi就拥有了一份Fu的拷贝(私有的属性和方法除外),在Zi中,如果不重新给x赋值,x默认和Fu的属性x的值一样是10。
在方法外如果直接这样写x=34;既不属于重新定义一个int型的x,也不属于给自己的属性x赋值!!!按照楼上的写法, int x=34;是对父类继承来的属性x的重写。。System.out.println(super.x);是有错误的,main为静态方法,父类变量x是非静态变量,在静态方法中不能直接调用非静态的变量!!!
作者: ☆今☆ 时间: 2013-8-8 21:54
应该是类中不能写语句吧,
x=34;是赋值语句
类中只能是成员变量和方法
作者: 肖博 时间: 2013-8-9 15:30
顶楼上一下,在多态中,静态成员函数中,无论编译还是运行都参考左边。
class Fu
{
int x = 10;
}
class Zi extends Fu
{
Zi()
{
int x=8;
}
int x=34;
}
class Example
{
public static void main(String[] args)
{
Fu f = new Zi();
System.out.println(f.x);
Zi z = new Zi();
System.out.println(z.x);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |