Да, можно вызывать один конструктор из другого. Но в этом есть правило. Если вызов сделан из одного конструктора в другой, то
этот новый вызов конструктора должен быть первым оператором в текущем конструкторе
public class Product {
private int productId;
private String productName;
private double productPrice;
private String category;
public Product(int id, String name) {
this(id,name,1.0);
}
public Product(int id, String name, double price) {
this(id,name,price,"DEFAULT");
}
public Product(int id,String name,double price, String category){
this.productId=id;
this.productName=name;
this.productPrice=price;
this.category=category;
}
}
Итак, что-то вроде ниже не будет работать.
public Product(int id, String name, double price) {
System.out.println("Calling constructor with price");
this(id,name,price,"DEFAULT");
}
Кроме того, в случае наследования, когда создается объект подкласса, сначала вызывается конструктор суперкласса.
public class SuperClass {
public SuperClass() {
System.out.println("Inside super class constructor");
}
}
public class SubClass extends SuperClass {
public SubClass () {
//Even if we do not add, Java adds the call to super class's constructor like
// super();
System.out.println("Inside sub class constructor");
}
}
Таким образом, в этом случае еще один вызов конструктора сначала объявляется перед любыми другими операторами.