Một trong những đặc tính hết sức quan trọng của Java - và quả thực, của tất cả các ngôn ngữ lập trình hớng đối tợng - đó là sự thừa kế. Nó cho phép một lập trình viên có thể tuỳ biến (customize) một lớp cho một ứng dụng đặc biệt mà không cần thay đổi chính bản thân lớp này. Để thay thế, một lớp mới đợc định nghĩa thừa kế từ lớp dẫn xuất và bổ sung hoặc định nghĩa lại các phơng thức thể hiện của nó nếu cần thiết. Bằng hỗ trợ việc dùng lại các lớp có sẵn, tính năng kế thừa có những thuận lợi to lớn trong khả năng làm thay đổi chức năng không cần tạo ra nhiều phiên bản của các lớp giống nhau.
Một lớp Cđợc gọi là lớp con (subclass) của một lớp B(hoặc tơng tự, Blà lớp cha (superclass) của C) nếu mô tả củaCcó dạng nh sau:
class C extends B
{
...
}
Khi C là lớp con của B, các đối tợng của C chứa tất cả các biến thể hiện của các đối tợng của Bcũng giống nh các biến thể hiện đợc mô tả trong C, và đáp ứng lại tất cả các phơng thức thể hiện đợc định nghĩa trong B cũng giống nh các phơng thức thể hiện đợc định nghĩa trong C. Hơn nữa, có thể định nghĩa lại các phơng thức thể hiện đã đợc định nghĩa trong B, bằng cách tái định nghĩa (overriding) cách ứng xử của các phơng thức này khi chúng đợc gắn vào các đối tợng C.
Chúng ta sẽ đợc thấy sự hữu ích của tính năng kế thừa trong các chơng trình tiếp theo trong cuốn sách này. Trớc hết hãy trở lại với lớp Time của chúng ta. Sau đây là một phiên bản mới của Time chỉ gồm hai phơng thức là advanceMinutes và
printTime.
{
private int hour,
minute;
public Time(int h, int m)
{
hour = h;
minute = m;
}
public void advanceMinutes(int m)
{
int totalMinutes = (60*hour + minutes + m) % (24*60);
if (totalMinutes < 0)
totalMinutes = totalMinutes + 24*60;
hour = totalMinutes / 60;
minute = totalMinute % 60;
}
public void printTime()
{
if ((hour == 0) && (minute == 0))
System.out.print("Giữa đêm!");
else if ((hour == 12) && (minute == 0))
else { if (hour == 0) System.out.print(12); else if (hour > 12) System.out.print(hour - 12); else System.out.print(hour);
if (minute < 10) System.out.print(" :0" + minute);
else System.out.print(" :" + minute);
if (hour < 12 ) System.out.print("AM"); else System.out.print("PM"); } } }