پست قبل در مورد سازنده کلاس بود. در این پست به سازنده ها در جریان وراثت می پردازم. فرض می کنیم یک کلاس به نام Parent داریم به شکل زیر:

public class Parent {
public Parent()
{
...
}
}

حال فرض می کنیم این کلاس یک subclass به نام Child داشته باشد. همانطور که قبلا اشاره شد در زمان ساخت یک شی یا نمونه (Instance) از کلاس، متد سازنده ی آن فراخوانی می شود. اگر کلاسی فرزند کلاس دیگر باشد در این حالت باید بدانیم که در constructor آن باید constructor کلاس پدر نیز به نوعی فراخوانی شود. این کار از طریق استفاده از متد ()super انجام می شود. به شکل زیر:

public class Child extends Parent {
public Child(){
super();
...
}
}

حال فرض کنیم که constructor کلاس پدر argument هایی به عنوان ورودی دارد. در این حالت باید زمان نوشتن constructor برای فرزند پارامترهای ورودی constructor پدر را درون متد ()super بفرستیم:

public class Parent {
String name;
public Parent(String name)
{
....
}
}
public class Child extends Parent {
public Child(String name){
super(name);
...
}
}

پس طبق آنچه دیده می شود اگر constructor کلاس پدر ورودی داشته باشد constructor کلاس فرزند هم نمی تواند بدون ورودی باشد. اما اینطور نیست. یعنی میتوانیم ورودی های constructor پدر را به روشی ارسال کنیم که constructor کلاس فرزند هیچ ورودی نداشته باشد برای اینکاربه روش زیر می توانیم عمل کنیم:

public class Child extends Parent {
String name="Parisa";
public Child(){
super(name);
...
}
}

قبلا در پست مربوط به static گفت بودم که متغیر های غیر استاتیک متعلق به instance یا نمونه ی کلاس و متغیر های استاتیک متعلق به کلاس هستند. پس برای استفاده از متغییر های غیر استاتیک مانند متغیر name در کلاس Child باید حتما نمونه ای از کلاس Child ساخته شود و کد نوشته شده به شکل بالا دچار خطا می شود. پس با توجه به توضیحات داده شده متغیر name ر اباید بصورت static تعریف کنیم:

public class Child extends Parent {
static String name="Parisa";
public Child(){
super(name);
...
}
}