Tổng Quan Về Tính Kế Thừa Trong Java
Tính kế thừa là một trong những khía cạnh cốt lõi của lập trình hướng đối tượng trong Java. Tính năng này cho phép một lớp (class) mới được tạo ra từ một lớp đã tồn tại, giúp tái sử dụng mã và tạo cấu trúc phân cấp cho các lớp trong ứng dụng.
Cú Pháp Kế Thừa Trong Java
Để thực hiện kế thừa trong Java, bạn sẽ sử dụng từ khóa extends
để chỉ định lớp con kế thừa từ lớp cha:
java
class ParentClass {
// Các thuộc tính và phương thức của lớp cha
}
class ChildClass extends ParentClass {
// Các thuộc tính và phương thức của lớp con
}
Đặc Điểm Của Kế Thừa Trong Java
-
Đơn Kế Thừa: Trong Java, một lớp chỉ có thể kế thừa từ một lớp duy nhất, điều này có nghĩa rằng không hỗ trợ kế thừa đa cấp (multiple inheritance).
-
Truy Cập Thành Phần Lớp Cha: Lớp con có thể truy cập các thành phần của lớp cha thông qua các phương thức
public
hoặcprotected
. Các thuộc tínhprivate
không thể truy cập trực tiếp. -
Ghi Đè Phương Thức (Override): Lớp con có thể ghi đè các phương thức của lớp cha để thay đổi hành vi mặc định của chúng, cho phép tùy chỉnh chức năng trong lớp con.
-
Tính Đa Hình (Polymorphism): Tính kế thừa cũng hỗ trợ tính đa hình, cho phép đối tượng của lớp con được xem như một đối tượng của lớp cha, giúp sử dụng linh hoạt trong quỹ đạo chương trình.
Ví Dụ Về Kế Thừa
java
class Animal {
void sound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Bark");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Meow");
}
}
Trong ví dụ này, cả Dog
và Cat
là các lớp con kế thừa từ lớp Animal
, mỗi lớp đều định nghĩa lại phương thức sound
.
Từ Khóa super
Trong Java
Từ khóa super
cho phép lớp con tham chiếu đến các thành phần trong lớp cha. Có một số cách để sử dụng super
:
-
Gọi Constructor của Lớp Cha: Khi tạo đối tượng lớp con,
super()
được sử dụng để gọi constructor của lớp cha.javaclass ParentClass { ParentClass() { // Constructor của lớp cha } } class ChildClass extends ParentClass { ChildClass() { super(); // Gọi constructor của lớp cha } }
-
Truy Cập Phương Thức hoặc Thuộc Tính: Lớp con có thể sử dụng
super
để gọi các phương thức hoặc thuộc tính lớp cha được định nghĩa công khai hoặc bảo vệ.javaclass ParentClass { void display() { System.out.println("This is from ParentClass"); } } class ChildClass extends ParentClass { void display() { super.display(); // Gọi phương thức của lớp cha System.out.println("This is from ChildClass"); } }
-
Chọn Constructor Khác của Lớp Cha: Nếu lớp cha có nhiều constructor, bạn có thể chỉ định cụ thể constructor nào sẽ được gọi từ lớp con.
javaclass ParentClass { ParentClass(int x) {} ParentClass() {} } class ChildClass extends ParentClass { ChildClass() { super(5); // Gọi constructor có tham số } }
Một Số Ví Dụ Về Tính Kế Thừa
Ví Dụ 1: Hệ Thống Quản Lý Nhân Viên
java
class Employee {
private String name;
private int employeeId;
private double salary;
public void work() {}
}
class Salesperson extends Employee {
private int numberOfSales;
@Override
public void work() {}
}
class Technician extends Employee {
private String techSkill;
@Override
public void work() {}
}
class Manager extends Employee {
private String department;
@Override
public void work() {}
}
Ví Dụ 2: Hệ Thống Quản Lý Trò Chơi
java
class GameObject {
protected int id;
protected double positionX;
protected double positionY;
}
class Player extends GameObject {
private String playerName;
}
class Monster extends GameObject {
private String monsterType;
}
class Item extends GameObject {
private String itemName;
}
Kết Luận
Tính kế thừa không chỉ giúp tái sử dụng mã, mà còn tạo ra cấu trúc dễ quản lý cho các ứng dụng lớn. Tuy nhiên, cần sử dụng kế thừa một cách cẩn thận để tránh các vấn đề kết cấu không mong muốn. Học cách thiết kế hiệu quả với tính kế thừa là một phần thiết yếu trong phát triển phần mềm chất lượng cao trong Java.
source: viblo