A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘腾 高级黑马   /  2012-11-21 22:30  /  1898 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘腾 于 2012-11-22 13:35 编辑

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。如果你想引用父类的某种东西,则非super莫属。请牢记“this通常指代当前对象,super通常指代父类”!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
一个子类已经继承了父类的所有方法,子类也未去重写这些方法,这些方法实际上已经属于子类,那么子类调用这些方法时,该用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,比如,父类的构造方法。






评分

参与人数 2技术分 +1 黑马币 +9 收起 理由
刘腾 + 9 感谢分析。
冯海霞 + 1

查看全部评分

回复 使用道具 举报
继承是指集成了父类所能继承的,比如public、protected等,而继承的概念如同遗传一样,已经属于你的了,而this指向的是当前你使用的对象,所以可以用this调用,而真正的区别体现在重写上,如果想调用被重写的方法,则必须用super,this会指向重写的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马