子类对象的创建过程:
子类的构造方法中,默认先调用父类的无参构造方法。如果没有显示的调用,那么隐含着super()。
super关键字:
可以访问父类的属性
可以访问父类的方法
指代父类的构造方法, 如果有多个,靠参数来区分。要在第一行。
this关键字:
作为本类的对象,
访问本类的属性。如果在继承中,本类没有这个属性,那么再找父类中。
访问本类的方法
可以指代本类的构造方法:this()。要在第一行。
public class A {
int i;
int j;
public void testA(){
System.out.println("i:"+i);
System.out.println("j:"+j);
}
public void fun(){
System.out.println("父类的fun方法....");
}
}
//实际开发不建议这么写,
class B extends A{
int i;//和父类有相同的属性
public void testB(){
System.out.println("i:"+super.i);//要想访问父类的属性,那么就用super
System.out.println("j:"+j);
//访问父类的fun方法
super.fun();
}
@Override
public void fun(){
System.out.println("子类的fun方法....");
}
}
this和super的对比:
比较点 | this | super |
访问属性 | 首先在子类中查找,如果没有就在父类中查找 | 直接查找父类 |
访问方法 | 先在子类中找,如果没有就去父类中查找 | 直接访问父类中方法 |
调用构造 | 调用本类中的其他构造方法 | 调用父类的构造方法 |
特殊 | 指自身的引用 | 没有概念 |
this,super关键字,不能出现在static方法中。