وراثت در جاوا یا Inheritance همیشه بین دو کلاس انجام می شود. یعنی ما کلاسی به نام پدر یا super class و کلاسی به نام فرزند یا sub class داریم.
کلاس sub class از کلاس super class ارث بری می کند.در جاوا برای اعلان ارث بری کلاسی از کلاس دیگر از واژه کلیدی extends  و به صورت زیر عمل می کنند:
public class SubClass extends SuperClass 
{

}
در جاوا ارث بری چندگانه  یا multiple inheritance وجود ندارد و هر کلاس فرزند تنها می تواند از یک کلاس پدر ارث بری انجام دهد (single inheritance ).
ارث بری را اگر بخواهیم با مثالی از دنیای واقعی تعریف کنیم به این صورت است که یک فرزندمی تواند از والدین خود از نظر فیزیکی مانند رنگ چشم قیافه هیکل و حتی خصیصه های ذاتی مانند صدا خلق و خو و ... را به ارث ببرد و علاوه بر این ارث بری ها خودش نیز خصیصه های منحصر به فرد دیگری داشته باشد.به همین صورت در جاوا که کلاس ها مدلی از اشیای واقعی موجود در محیط هستند از کلاسی که ارث بری میکنند می توانند خصوصیاتی از آنها را هم به ارث ببرند که این خصوصیات می تواند فیلد ها و متد ها باشند و حتی می تواند دارای خصوصیاتی باشد که منحصر به فرد خودش باشد.
پس با استفاده از وراثت می توان کلاس های جدیدی ایجاد کرد که از رفتار ها و خصوصیات کلاس های دیگر (در حالت معمولی فقط یک کلاس) و خصوصیات و رفتار های شخصی خودش کلاسی جدید ایجاد کنیم.
هر کلاس فرزند می تواند از یک کلاس پدر ارث بری کند ولی چند کلاس می توانند از کلاس پدر به عنوان فرزند ارث بری داشته باشند.اما کلاس ها می توانند وراثت را به صورت سلسله مراتبی پیاده سازی کنند.
نکات زیر باید در وراثت مورد توجه قرار گرفت :
1 - تمام اعضای private پدر در فرزند به صورت مستقیم غیر قابل دسترس می باشد.
2 - فرزند مستقیما می تواند به اعضای public کلاس پدر دسترسی پیدا کند.
3 - کلاس فرزند می توانند شامل فیلد ها و متد های جدید و مخصوص خودش باشد.
4 - کلاس فرزند می تواند متد های public کلاس پدر را لغو یا override کند.
توضیح بیشتر : کلاس فرزند زمانی متدی را override می کند که متدی همنام با متد پدر و یکسان در نوع و تعداد پارامتر متد پدر را در کلاس فرزند پیاده سازی کرده باشد.  و زمانی کلاس فرزند متدی را overloading میکند که متدی همنام با پارامتر های غیر همسان را پیاده سازی کند.در مثال آخر همین پست با مثالی override و  overloading را نشان خواهیم داد.
5 - تمام فیلد های کلاس پدر به عنوان اعضای اصلی کلاس فرزند محسوب می شود.
6 - کلاس final را نمی توان از آن ارث بری کرد.
کلمات کلیدی که برای وراثت در جاوا استفاده می شود super  و protected می باشد و دو مفهوم به نام override و overloading که قبلا به آن اشاره داشتیم.از super می توانیم برای فرآخوانی سازنده ی کلاس پدر و همچنین override کردن متد پدر در فرزند استفاده کنیم.
در وراثت متد هایی که ویژگی های زیر را داشته باشند را نمی توان override  کرد :
1 - متد private
2 - متد static
3 - متد final
4 - متد از کلاس final
/**
*
* @author delnia.blog.ir
*/
public class SubClass extends SuperClass {
public SubClass() {
super();
System.out.println(getCount());
System.out.println(super.getCount());
}
@Override
public int getCount() {
System.out.print("printed from override method in Test Class : ");
return 25;
}

public int getCount(int i){
return i;
}

public static void main(String[] args) {
new SubClass();
}
}
class SuperClass {
protected int i = 20;
private int count = 20;
public SuperClass() {
System.out.println("Printed from SuperClass Constructor");
}
public int getCount() {
System.out.print("printed from getCount method in SuperClass : ");
return count;
}
}
اگر به کد دقت کنید با استفاده از super() در سازنده کلاس SubClass را فراخوانی کردیم. با استفاده از super.getCount() متد کلاس پدر را override کردیم. کلاس SuperClass که به عنوان کلاس پدر هست، دارای فیلدی به نام count با دسترسی private است که دسترسی مستقیم فرزندان را به آن غیر ممکن می کند. ام با استفاده از متد getCount() در پدر فرزندان می توانند فقط مقدار count را بگیرند و تغییری در آن نمی توانند ایجاد کنند.برای تغییر مقدار count می توان متدی به صورت زیر (هر نامی می توان انتخاب کرد)  در SuperClass ایجاد کرد :
public void setCount(int count) {
     this.count = count;
}
بنابر این با استفاده از متد های SuperClass می توان نسبت به تغییر و دستیابی مقادیر فیلد های private آن کار هایی انجام داد که بسته به نیاز برنامه نویس و هر دلیل دیگری می تواند این محدودیت ها را اعمال کرد.