黑马程序员技术交流社区

标题: this还是super的问题? [打印本页]

作者: 刘腾    时间: 2012-11-21 22:30
标题: this还是super的问题?
本帖最后由 刘腾 于 2012-11-22 13:35 编辑

一个子类已经继承了父类的所有方法,子类也未去重写这些方法,这些方法实际上已经属于子类,那么子类调用这些方法时,该用this还是super呢?虽然不管用哪个,结果都是一样的,但如何用才符合这两个关键词的意义呢

作者: 王斌    时间: 2012-11-22 11:09
在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。如果你想引用父类的某种东西,则非super莫属。请牢记“this通常指代当前对象,super通常指代父类”!
作者: 唐永康    时间: 2012-11-22 12:33
一个子类已经继承了父类的所有方法,子类也未去重写这些方法,这些方法实际上已经属于子类,那么子类调用这些方法时,该用this还是super呢?虽然不管用哪个,结果都是一样的,但如何用才符合这两个关键词的意义呢


哈哈,,同学,你明显犯了一个逻辑上的错误,我慢慢给你说清楚,

我写一个实例给你看看就明白了

class Fu
{
static void method1()
{
  System.out.println("method1");
}
static void method2()
{
  System.out.println("method2");
}
}

class Zi extends Fu
{
  void ZiMethod()
{
  this.method1();
  super.method1();
}

public static void main(String[] args)
{
  Zi z = new Zi();
  z.method1();
  z.ZiMethod();   
}
}

子类继承了父类,父类里面的非私有方法子类也有,那么子类调用this.method1(); 这时是调用子类里面的方法而不是调用父类的,因为子类又没有去覆写
父类里面的方法,而super.method1();是调用父类的方法,
所以子类调用的方法和父类的一模一样。两个输出的结果也是一模一样。所以按照你说的那种两种方式就结果而言没有什么区别。

首先,this是本类对象使用的,意思是代表本类的一个对象,super代表可以调用父的一个方法,从某种意义上说也可以代表父类的对象。super还可以调用父类的构造方法,这个是子类所做不到的。如果用super去调用子类的特有的方法就行不通了。

总结,子类继承了父的,可以用this调用,如果没有继承,只能用super。当子类需要用到父类
里面的一个成员时,而子类又没有继承过来这里只能用到super,比如,父类的构造方法。







作者: 卞潇洋    时间: 2012-11-22 13:20
继承是指集成了父类所能继承的,比如public、protected等,而继承的概念如同遗传一样,已经属于你的了,而this指向的是当前你使用的对象,所以可以用this调用,而真正的区别体现在重写上,如果想调用被重写的方法,则必须用super,this会指向重写的方法




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