java,this不能和super同时使用 并且放在第一行
2017-11-28 10:33
260 查看
class A {
int year, month, day;
public A() {
this(2016, 4, 5);//This调用本类的其他构造函数,必须写在第一行
//super()是调用父类的无参构造函数,写不写super()均可,子类默认调用super();
//super(int x)是调用父类的有参构造函数;
//无论是super()还是super(xxxx)也要写在子类构造函数的第一行,
//所以super和this关键字不能同时出现在子类的构造函数中
}
public A(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void print() {
System.out.println(year + "," + month + "," + day);
}
}
public class Test {
public static void main(String[] args) {
A a = new A();
a.print();
}
}
///输出: 2016,4,5
不能同时出现,是因为this和super都要定义在第一行,所以只能有一个;
那么为什么要定义在第一行呢?
先说super,因为子类继承了父类的属性和方法,所以在先初始化父类的属性和方法,这样子类才可以初始化自己特有的,因为java中不允许调用没有初始化的成员。
this就是调用本类的其他构造函数,在其他构造函数中也有默认的super(),或者自定义了带参的super,这样就初始化了父类的成员了,所以写了this的构造函数不能再写super了,因为实例化一个对象运行两次super是不安全的。this放在第一行,也是因为要先初始化父类和this代表的构造函数先,因为当前构造函数可能用到那些成员,所以那些成员得要先初始化。
int year, month, day;
public A() {
this(2016, 4, 5);//This调用本类的其他构造函数,必须写在第一行
//super()是调用父类的无参构造函数,写不写super()均可,子类默认调用super();
//super(int x)是调用父类的有参构造函数;
//无论是super()还是super(xxxx)也要写在子类构造函数的第一行,
//所以super和this关键字不能同时出现在子类的构造函数中
}
public A(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void print() {
System.out.println(year + "," + month + "," + day);
}
}
public class Test {
public static void main(String[] args) {
A a = new A();
a.print();
}
}
///输出: 2016,4,5
不能同时出现,是因为this和super都要定义在第一行,所以只能有一个;
那么为什么要定义在第一行呢?
先说super,因为子类继承了父类的属性和方法,所以在先初始化父类的属性和方法,这样子类才可以初始化自己特有的,因为java中不允许调用没有初始化的成员。
this就是调用本类的其他构造函数,在其他构造函数中也有默认的super(),或者自定义了带参的super,这样就初始化了父类的成员了,所以写了this的构造函数不能再写super了,因为实例化一个对象运行两次super是不安全的。this放在第一行,也是因为要先初始化父类和this代表的构造函数先,因为当前构造函数可能用到那些成员,所以那些成员得要先初始化。
相关文章推荐
- java,this放在第一行,不能和super同时使用
- 为什么java的构造方法中this()或者super()要放在第一行
- 为什么java的构造方法中this()或者super()要放在第一行
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
- Java关键字this、super使用总结
- Java关键字this、super使用总结
- java的this和super的使用详解
- Java关键字this、super使用总结
- 关于this和super使用的JAVA面试试题
- Java关键字this、super使用总结
- Java 关键字 this super 使用总结
- java中this和super关键字使用详解
- 静态方法中为什么不能使用super和this
- Java关键字this、super使用总结
- java中的this和super使用
- Java关键字this、super使用总结
- 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释
- java super,this区别使用
- Java关键字this、super使用总结
- java子类对象在子类方法中使用父类属性 使用this和super都可以