黑马程序员技术交流社区

标题: this和super的问题 [打印本页]

作者: 文密    时间: 2013-3-6 15:00
标题: this和super的问题
本帖最后由 文密 于 2013-3-7 21:27 编辑

class A
{
A(){}
}
class B extends A
{
B()
  
{
System.out.println(this);  //此处为什么可以打印出this的地址值
  System.out.println(super);  // 为什么此处会报错了
}

}

class Ectest
{
public static void main(String[] args)
{
  B b=new B();
   
}
}

有点不明白为什么这样了。





作者: 何仕映    时间: 2013-3-6 15:08
因为,建立了B 的对象,在打印的时候对象b自动调用了toString()方法,使之以字符串的形式打印出来,你根本没有建立A的对象,又怎么能打印出来呢?对象的打印都是调用了对象的toString()方法,该方法是定义在object类中的。
作者: 黑马斯巴达    时间: 2013-3-6 15:36
super是用来引用父类的方法和成员变量的,你这里的super什么都没有引用到,实际是没有意义的。自然会报错。如果在父类中定义一个成员变量再用super引用自然就没问题啦
作者: 肖明凯    时间: 2013-3-6 15:41
谢军 发表于 2013-3-6 15:36
super是用来引用父类的方法和成员变量的,你这里的super什么都没有引用到,实际是没有意义的。自然会报错。 ...

那super本质是什么呢?父类的引用?
作者: 张卫刚    时间: 2013-3-6 16:11
//1:super语都要放在构造函数的第一行,也就是说你的super()要写在System.out.println();这行之前才算第一行
//2:super调用格式:调用父类构造super();调用父类方法用super.show();
//3:你的写法super,java规则是不允许的
System.out.println(this);  //此处为什么可以打印出this的地址值

//你main函数里面已经创建对象了,那么this这时就代表你这个对象b,也就是引用对象b,就能打印出b对像的地址值
System.out.println(super);  // 为什么此处会报错了
作者: 克零岚    时间: 2013-3-6 19:45
我感觉二楼的哥说的正确的呢
你建立了B 的对象,在打印的时候对象b自动调用了toString()方法,使之能把地址值打印出来,但是你根本没有建立A的对象,就相当于Sysotem.out.println(null),这句语法也是在编译的时候就报错的!
作者: 黑马斯巴达    时间: 2013-3-7 10:44
肖明凯 发表于 2013-3-6 15:41
那super本质是什么呢?父类的引用?

本质貌似有点深奥,我只知道在调用父类的方法或者属性的时候再用它。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2