今天参加一个Java笔试,遇到以到this()和super()是不是必须放在函数的第一行的问题,我表示不知道。回来后查了一些资料,整理记录一下。
1、加点(this./super.)
this:代表当前对象,加点可以调用当前对象中的方法和属性。比较常用的是为了区分形参和成员名相同情况
public class test {
private String name;
private int age;
private void setValue(String name,int age){
this.name=name;
this.age=age;
}
}
super:代表当前对象的父类对象,加点可以用来调用父类中的方法和属性。
public class test extends person{
public void setValue(String name){
super.setName();
System.out.println(super.name);
this.name=name;
System.out.println(this.name);
}
@Test
public void test(){
test t=new test();
t.setValue("小红");
}
}
class person{
String name;
public void setName(){
name="小明";
}
}
上面输出的结果:
小明
小红
2、带括号(this()/super())
this():调用本类的构造,如果括号内有形参,则是调用本类的与之相对应参的构造方法
super()调用父类指定的构造方法
public SlidingButtonView(Context context) {
this(context, null);//调用第二个构造函数
}
public SlidingButtonView(Context context, AttributeSet attrs) {
this(context, attrs,0);//调用第三个构造函数
}
public SlidingButtonView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);//调用父类指定构造函数
}
3、总结:
(1)this()和super()都是使用只能使用于构造方法中
(2)this()调用本类的构造,如果括号内有形参,则是调用本类的与之相对应参的构造方法;super()调用父类指定的构造方法
(3)都只能写在构造方法的第一句
(4)super()可以不写,在不写的时候会默认调用父类的无参构造
(5)this()与super()不能共存,两者只能使用一个
(6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
(7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字
参考文章: