java,this不能和super同时使用 并且放在第一行

来源:互联网 发布:pink ward知乎 编辑:程序博客网 时间:2024/06/02 05:35
  1. class A {  
  2.     int year, month, day;  
  3.   
  4.     public A() {  
  5.         this(201645);//This调用本类的其他构造函数,必须写在第一行  
  6.                          //super()是调用父类的无参构造函数,写不写super()均可,子类默认调用super();  
  7.                          //super(int x)是调用父类的有参构造函数;  
  8.                          //无论是super()还是super(xxxx)也要写在子类构造函数的第一行,  
  9.                          //所以super和this关键字不能同时出现在子类的构造函数中  
  10.     }  
  11.   
  12.     public A(int year, int month, int day) {  
  13.         this.year = year;  
  14.         this.month = month;  
  15.         this.day = day;  
  16.     }  
  17.   
  18.     public void print() {  
  19.         System.out.println(year + "," + month + "," + day);  
  20.     }  
  21. }  
  22.   
  23. public class Test {  
  24.     public static void main(String[] args) {  
  25.         A a = new A();  
  26.         a.print();  
  27.     }  
  28. }  
  29. ///输出: 2016,4,5  
不能同时出现,是因为this和super都要定义在第一行,所以只能有一个;
那么为什么要定义在第一行呢?
先说super,因为子类继承了父类的属性和方法,所以在先初始化父类的属性和方法,这样子类才可以初始化自己特有的,因为java中不允许调用没有初始化的成员。
this就是调用本类的其他构造函数,在其他构造函数中也有默认的super(),或者自定义了带参的super,这样就初始化了父类的成员了,所以写了this的构造函数不能再写super了,因为实例化一个对象运行两次super是不安全的。this放在第一行,也是因为要先初始化父类和this代表的构造函数先,因为当前构造函数可能用到那些成员,所以那些成员得要先初始化。
阅读全文
0 0