黑马程序员技术交流社区

标题: 关于this关键字和super关键字的分享及求助 [打印本页]

作者: 夏儒日    时间: 2012-7-6 14:14
标题: 关于this关键字和super关键字的分享及求助
      最近在看关于面向对象的知识,虽然毕姥爷在视频里对this和super关键字的讲述比较详细,但是具体应用的时候还是有不清楚不明白的地方.于是上论坛搜索关于this和super的帖子,发现论坛上有大把大把关于this和super的帖子,想必大家在学习的过程中也有跟我类似的困惑,于是将关于this和super的描述进行了以下系统的总结及对比,希望对大家的学习有所帮助.
     一.this关键字:
            1.this代表的是什么?
        this代表的是一个对象.既然this代表的是一个对象,那么this代表的是哪个对象呢?简单的说,哪个对象在调用this所在的函数,this就代表哪个对象.此时this和该对象的地址值均指向同一个指向.
       
            2.this的应用:概括的讲,this用在本类当中.
        (1)用于区分成员变量和局部变量.如程序中的应用1;
        (2)用在在定义类中函数时,该函数内部要用到调用该函数的本类对象时,因为此时对象还没被创建,故此时用this表示本来未被创建的对象.总结就是但凡本类函数用到本类对象时用this表示;如程序中的应用2;
        (3)用于构造函数间的调用.而且this语句只能出现在构造函数的第一行,因为初始化动作要先执行.如程序中的应用3.
class  Person
{       
        private String name;
        private int age;

        Person(String name)
        {
                this.name=name;//应用情况1
        }
        Person(String name,int age)
        {
                this(name);//应用情况3
                this.age=age;
        }

        public  void show( )
        {
                System.out.println("my name is"+this.name);
        }

        public  void speak()
        {
                this.show();//应用情况2
                System.out.println("my age is"+age);
        }
        public static void main(String[] args)
        {
                Person p1 = new Person("xiaruri");
                Person p2 = new Person("xiaruri",100);
                p1.speak();
                p2.speak();
        }
}
          二.super关键字
        1.super代表的是什么?
               Super代表的是父类对象的引用.
        2.super的应用:概括的讲,super的使用和this的使用几乎一致.
            (1)用于子类访问父类中的同名变量.
            (2)用于子类访问父类构造函数.而且只能放在子类构造函数的第一行.结合this应用中的(3),说明构造函数中只能有super语句和this语句中的一种!this和super不能同时出现在一个构 造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。


      三.this和super的共性及局限性       
         1.相似之处:this和super用法类似都必须写在构造函数的第一行;两者都代表的是对象.
             2.局限性:
        (1)this和super可以同时存在于子类中,但是不可以同时存在于同一个子类构造函数中;
        (2):this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块.

           以上是我查阅资料以及查看以前黑马关于this和super关键字的帖子后的一些总结.有不正确的地方和遗漏之处请大家多多指教.不甚感激!
           发现自己总结分享也是个提升自己的过程,可以把自己模棱两可的概念捋清捋顺,同时也能帮助一些有共同困惑的朋友.何乐而不为!希望在黑马论坛上能看到更多大家的学习心得和总结,大家共同学习共同进步!!.




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