最近在看关于面向对象的知识,虽然毕姥爷在视频里对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关键字的帖子后的一些总结.有不正确的地方和遗漏之处请大家多多指教.不甚感激!
发现自己总结分享也是个提升自己的过程,可以把自己模棱两可的概念捋清捋顺,同时也能帮助一些有共同困惑的朋友.何乐而不为!希望在黑马论坛上能看到更多大家的学习心得和总结,大家共同学习共同进步!!. |