在java语言中,关键字this指的是对当前对象的引用
关键字super指的是当前对象里面的父对象的引用
当引用当前对象的某个方法或某个成员时,通常会使用this; 而通过super可以调用父类的构造方法、父类的方法和属性。
this()函数主要应用于同一类中从某个构造函数调用另一个重载版的构造函数。this()只能用在构造函数中,并且也只能在第一行。所以在同一个构造函数中this()和super()不能同时出现。
定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行。
1 public class Base { 2 public int status = 0; 3 Base(int status){ 4 this.status = status; 5 } 6 public void print(){ 7 System.out.println("base"); 8 System.out.println(this.status); 9 } 10 } 11 12 public class Sub extends Base{ 13 public int status; 14 Sub(int status){ 15 super(status+1); 16 this.status =status; 17 } 18 public void printSub(){ 19 System.out.println("sub"); 20 System.out.println("status ="+status); 21 } 22 23 public void printBase(){ 24 System.out.println("-------"); 25 super.print(); 26 System.out.println("Base ="+super.status); 27 } 28 } 29 30 public class test { 31 public static void main(String[] args) { 32 Sub s = new Sub(2); 33 s.printBase(); 34 s.printSub(); 35 } 36 }
程序运行结果为
------- base 3 Base =3 sub status =2
不同点:
1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用
2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用
相同点:
1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的