之前总是会对this和super搞得模模糊糊,今天就把它弄清楚。
1.基本概念:
super关键字——>子类可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字——>指向自己的引用。
super(this)关键字都可以调用父类(子类)的属性和方法。
实例:
class Father{
void speak(){
System.out.println("I am father");
}
}
class Child extends Father{
void speak(){
System.out.println("I am child");
}
void test(){
this.speak(); //this 会调用自己的speak()方法
super.speak(); //super会调用父类的speak()方法
}
}
public class Test{
public static void main(String[] args){
Father f = new Father();
f.speak();
Child c = new Child();
c.test();
}
}
输出结果将会是:
I am father
I am child
I am father
2.子类和父类的构造器
子类其实是不会继承父类的构造器的,但子类可以隐式或显示的调用父类的构造器。
子类必须用super关键字配上适当的参数列表调用父类带有参数的构造器。
如果父类的构造器没有参数,则子类可以不要super关键字,系统自己会调用父类的无参构造器。
实例:
class SupClass{
private int i;
SupClass(){ // 父类无参构造器
System.out.println("这是父类无参构造器");
}
SupClass(int i){ //父类带参构造器
System.out.println("这是父类带参构造器");
this.i = i;
}
}
class Subclass extends SupClass{
private int i;
Subclass(){
System.out.println("这是子类无参构造器");
}
SubClass(int i){
super(13); //用super关键字调用父类带参构造器
System.out.println("子类:"+i);
this.i = i;
}
}