黑马程序员技术交流社区
标题:
今天刚学到的this和super跟大家分享一下
[打印本页]
作者:
小同志
时间:
2015-4-15 19:41
标题:
今天刚学到的this和super跟大家分享一下
刚刚整理的 求大神勿喷学渣
super和this的区别:
1.this始终是指向本类的成员:
1).访问本类的成员;
class A{
int num = 10;
void f1(){
System.out.println("num = " + this.num);
this.f2();//调用本类的f2()方法
}
void f2(){
}
}
2).在本类的构造方法中,调用本类其它的构造方法;
class A{
A(){
System.out.println("a1");
}
A(int b){
this();//调用此类无参的构造方法;它必须是这个构造方法的第一条有效语句;
System.out.println("a2");
}
}
main(){
A a = new A(2);
}
2.super始终是指向父类的空间:
1.通过super可以访问父类的成员:
(重点) 2.可以调用父类的构造方法;
3.在子类中的构造方法,默认情况下会在第一行自动添加一句:super();//调用父类的无参的构造方法;
4.注意:
如果父类没有无参的构造方法,那么子类的构造方法中,就必须使用super()去显示的去调用父类的某个
带参的构造方法;
5.在子类的构造方法中调用父类的构造方法使用super().这里也要求super()必须是这个构造方法的第一句话;
6.在子类的构造方法中,不能即使用this()又使用super();因为都需要在第一句话;
小结:
1.this可以访问本类成员属性和成员方法;调用本类其它构造方法
2.super可以访问父类的成员属性和成员方法;调用父类的构造方法;
3.有一个时候,需要我们在子类中必须显示的使用super()去调用父类的构造方法:
当父类没有无参构造方法时:
class A{
A(int a){
}
}
class B extends A{
//不论子类中有多少个构造方法,每个构造方法内都要显示的去super(),调用父类带参构造方法;
B(int n){
super(n);
}
}
作者:
Brokenman
时间:
2015-4-15 21:00
加油不错
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2