黑马程序员技术交流社区
标题:
super和this的区别
[打印本页]
作者:
zlp19940327
时间:
2015-4-16 00:58
标题:
super和this的区别
/*
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);
}
}
*/
class A{
int num = 10;
A(int b){
// this();//调用此类无参的构造方法;它必须是这个构造方法的第一条有效语句;
System.out.println("a2");
}
void fun(){
System.out.println("父类的fun()方法");
}
}
class B extends A
{
B(int n){
super(n);//调用了父类的带一个int参数的构造方法;
// this("aaa");
}
B(String a ){
}
int num = 20;
void show(){
System.out.println("num = " + super.num);//父类的num
super.fun();//父类的fun()方法
}
}
class Demo
{
public static void main(String[] args)
{
// new B().show();
new B(20);
}
}
复制代码
作者:
zeng1994
时间:
2015-4-16 01:08
加油加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2