黑马程序员技术交流社区
标题:
看看这个
[打印本页]
作者:
王春祥
时间:
2012-3-19 17:00
标题:
看看这个
现在感觉敲着敲着代码忽然就会发现不明白的地方了
class Fu
{
int num=4;
}
class Zi extends Fu
{
int num=5;
}
class ExtendDemo
{
public static void main(String[] args)
{
Zi z=new Zi();
System.out.println(super.num);
}
}
编译后
ExtendDemo.java:38: 错误: 无法从静态上下文中引用非静态 变量 super
System.out.println(this.num);
^
ExtendDemo.java:38: 错误: 找不到符号
System.out.println(this.num);
^
super换this也一样,改成z就好,这是为什么呢用super和this替代和本身的对象名有什么区别呢,还有num是非静态成员变量,怎么静态的主函数依然可以使用呢
作者:
张锐
时间:
2012-3-19 17:13
main所在类的父类是object类,你调用super当然没有num属性了。
只有在同一个类中,静态函数才访问静态变量。你这里是在main里面定义的类,算局部变量,当然可以访问了。
作者:
周建
时间:
2012-3-19 17:25
首先main可以访问非静态的num是因为z.num中z是已经创建的实例对象,此时num已存在与堆内存中,也就是说只能是(对象.num)才可以访问num;
System.out.println(super.num); 这里不管是super还是this都代表类名而不是一个实例对象, 所以无法访问非静态的num,
作者:
魏群
时间:
2012-3-19 17:35
this代表当前对象的引用 super带表父类的引用
ExtendDemo的父类是Object
super.num; 的时候无论是this还是super都没有num属性。
还有num是非静态成员变量,怎么静态的主函数依然可以使用呢
如下就可以
public static void main(String[] args)
{
Fu fu = new Fu();
System.out.println(fu.num);
}
作者:
肖岑锋
时间:
2012-3-19 17:49
你的意思是在主函数new了一个zi对象出来,然后就可以在主函数使用super来调用new出来的zi对象的父类属性吗?那么你在主函new了很多个对象怎么办?在主函数使用super访问的是main函数的父类。
作者:
于紫洋
时间:
2012-3-19 17:52
主函数的this和super都出现了是闹哪样啊
作者:
陈从宾
时间:
2012-3-19 18:58
ExtendDemo默认的父类是object类,你在类ExtendDemo使用super,此时super指的是object类,而object类里没有你要的num属性,所以会出现ExtendDemo.java:38: 错误: 找不到符号
如果你使用this,则此时this指代的是类ExtendDemo,this.num是指调用ExtendDemo中的属性num而你在ExtendDemo没有定义num所以也会出现.java:38: 错误: 找不到符号
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2