this和super的区别
先讲this和super的作用
this:表示本类属性、表示本类方法和当前对象,俏皮的说是自己用的
super:调用父类的构造方法,俏皮的说是爸爸专用
1.this:每个类的每个非静态方法(没有被static修饰)都会隐含一个this关键字,它指向调用这个方法的对象;当在方法中使用本类属性时,都会隐含地使用this关键字,当然也可以明确使用。
三种用法:
一:普通的直接引用、
二:参与成员名字重名的时候,用 this 来区分、
三:引用构造函数(引用构造函数的时候要放在函数第一行)
2.super: 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类(亲生爸爸)。
super也有三种用法:
- 普通的直接引用、与 this 类似,super 相当于是指向当前对象的父类,这样就可以用 super.xxx 来引用父类的成员。
- 子类中的成员变量或方法与父类中的成员变量或方法同名,调用父类的方法
- 而且是两者都有的属性、引用构造函数
- super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
- this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
两者的异同:
- this 和 super 不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
- this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用。包括:static 变量,static 方法,static 语句块。
- 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。 super代表的是父类空间的引用,his代表的是所属函数的调用者对象.