黑马程序员技术交流社区

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

作者: 1161272014    时间: 2012-7-14 09:33
标题: this和super问题
this和super分别有哪些特殊含义,都有哪些种用法
作者: 李思静    时间: 2012-7-14 09:37
Java中,this通常指当前对象,super则指父类。当你想要引用当前对象的成员或者方法,就用this来实现,this的另一个用途是调用当前对象的另一个构造函数。引用父类对象必须用super关键字
作者: 韩伟    时间: 2012-7-14 09:54
JAVA中,当子类和父类有同名变量或者相同函数时,子类变量在调用这些相同的成员时系统默认为子类的成员,也就是this,指的是当前类的引用。如果需要调用父类的成员,就要在成员前面加上super关键字。
作者: 陈冲    时间: 2012-7-14 09:55
this关键字
        当成员变量和局部变量重名,可以用关键字this来区分
        this:代表当前对象。
        this就是所在函数所属对象的引用。
        简单来说,哪个对象调用了this所在的函数,this就代表哪个对象。
        this也可以用于在构造函数中调用其他构造函数
        注意:只能定义在构造函数的第一行。因为初始化动作要先执行。
        只要在本类中使用了本类的对象,通常使用this
super
        super代表的是父类,要在子类中调用父类的成员需要使用super()语句
作者: 位雪    时间: 2012-7-14 15:52
本帖最后由 位丹丹 于 2012-7-14 15:58 编辑

视频中讲到:
this:代表本类的对象,代表它所在函数所属对象的引用,即哪个对象在调用this所在的函数,this就代表哪个对象。
this语句用于构造函数之间进行互相调用,且只能定义在构造函数的第一行
如果子类中出现私有的同名成员变量时,子类要访问本类中的变量用this,访问父类中的成员变量用super
super的使用和this的使用几乎一致,this代表本类对象的引用,super代表的是父类对象的引用。


作者: 鲍霄霄    时间: 2012-7-14 19:10
首先,this表示当前对象,即当前类下面。每个类都默认的继承自Object类,所以,当前类如果没有明确指出继承自别的类的话,那么在当前类下面用this调用的,除了有当前类里面的东西,还有从Object继承过来的东西,同样,如果要是指明了继承的类,那么当前类里用THis调用的,就包括了当前类里的,继承类里的,还有Object里的东西甚至是更多类里的东西,这要取决于被继承的类有没有再继承自别的指明的类。有点绕口,举个列子,孙子继承儿子的财产,但儿子的财产中有一部分是继承自父亲的,而父亲的财产有一部分是继承自爷爷的,所以此时孙子继承儿子的财产,事实上是把儿子、父亲、爷爷的财产都给继承过来。同样用这个例子来说super。假如他们祖辈都是木匠,儿子会造桌子,孙子也会造,但工艺部一样,孙子不仅继承了儿子的工艺,他自己写创造(重写)了一个工艺,此时,如果你只说用工艺生产桌子,那么JAVA就会用你的工艺来生产桌子,如果你要想用父亲的工艺,那么你就要用super.工艺才行,这就是super的用法。说的比较通俗,希望能对你有帮助,谢谢。
作者: 侯茂绵    时间: 2012-7-15 00:01
{:soso_e140:}这问题问的好

作者: 耿立刚    时间: 2012-7-16 14:58
this:this是调用当前对象,也就是本类的。如:this(10)也就是调用本类的有参构造方法,参数值就是10
super:super是指父类,就是当前类的父类。如:super(msg)也是给父类有参构造方法传入一个msg参数


this与super比较;
用于构造方法时:this用于调用本类的其他构造方法,super用于调用父类中参数匹配的构造方法

用于变量时:this用于访问实例变量,以区分局部局部变量,super用于访问父类的属性(前提是访问控制权限允许)

用于方法时:隐含调用本类的方法,super用于访问父类的方法(前提是访问控制权限允许)

其它用途:this可用来指代本身,将自己作为参数传递给别的对象中的方法,super不能作为方法的参数

给你再讲下使用规则:
1、this或super调用,两者不能同时出现
2、this或super调用必须位于构造方法代码的第一行,在其后(而不能在它之前)可以有其他的初史化代码
3、如果在构造方法中没有显式使用this语句调用重载的其他构造方法,也没有使用super语句调用父类构造方法,则系统默认调用父类的无参构造方法,即super()。
作者: 王海亮    时间: 2012-7-16 15:10
this通常指当前对象,super则指父类的。
作者: 陈云帆    时间: 2012-7-16 16:34
this,super一个是指向当前类的对象,super是指向父类对象,其实他们的用法并不一样的.以super为例.
它主要用在构造器中,当然也有在方法中使用,我不推荐这么用,既然是重载父类的方法,就没有必要调用父类的方法,当然也不能一概而论.super在子类访问父类的成员和行为,这就必须受类继承规则的约束,也就是说子类可见的资源才能被super 访问.而this就有点不一样,他代表当前对象,当然所有的资源都可以访问.
     在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
      而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.
大多数情况下,我们都回采用默认的方式 ,即父类存在无参数的构造器,子类不用采用编译器默认的插入方式.但是我还是建议大家加上super()这句.这样程序的代码兼容性和结构性好.
作者: 程潇    时间: 2012-7-16 16:58
this:
特点:this代表它所在函数所属对象的引用,即哪个对象在调用this所在函数,this就代表哪个对象
何时用?
    1)当在函数内需要用到调用该函数的对象时
    2)构造函数之间调用时
    3)this语句只能定义在构造函数的第一行,因为初始化动作要先执行
应用:
    1)区分同名变量(成员变量和局部变量)
    2)构造函数之间调用
例子:
class ThisDemo{
     private int a;
    public void setA(int a){
        this.a = a;    //应用1
    }
    public ThisDemo(){
        System.out.println("constructor ThisDemo()")
    }
    public ThisDemo(int a){
        this();    //应用2
        System.out.println("constructor ThisDemo(int a)");
    }
}

super:
指的是父类
何时用:在子类中需要调用父类的成员时用
应用:
    1)子类构造函数调用父类构造函数
    2)子类方法调用父类成员变量
    3)子类方法调用父类成员函数
例子:
class Fu{
    int a=0;
    int b=0;
    public Fu(){
        System.out.println("constructor Fu()");
    }
    public void methodFu(){
        System.out.println("methodFu()");
    }
}

class Zi extends Fu{
    double sum=0;
    public Zi(){
        super();    //应用1
        System.out.println("constructor Zi");
    }
    public void methodZi(){
        sum = super.a + super.b;    //应用2
        System.out.println(sum);
        super.methodFu();    //应用3
    }
    public static void main(String[] args){
        Zi zi = new Zi();
        zi.methodZi();
    }
}














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