Tính trừu tượng trong Java
Trong Java, sự trừu tượng có nghĩa là những thứ đơn giản như các đối tượng (object) , các lớp (class) và các biến (variables) đại diện cho mã và dữ liệu cơ bản phức tạp hơn. Điều này rất quan trọng vì nó cho phép tránh lặp lại cùng một công việc nhiều lần. Để tìm hiểu về tính từu trượng trong Java, mời bạn đọc tham khảo bài viết dưới đây.
1. Lớp Abstract trong Java
Sử dụng từ khóa abstract để khai báo một lớp abstract. Từ khóa này xuất hiện trước từ khóa class trong khai báo lớp.
/* Ten File : Employee.java */
public abstract class Employee {
private String name;
private String address;
private int number;
public Employee(String name, String address, int number) {
System.out.println("Xay dung mot Employee");
this.name = name;
this.address = address;
this.number = number;
}
public double computePay() {
System.out.println("Ben trong Employee computePay");
return 0.0;
}
public void mailCheck() {
System.out.println("Gui mail kiem tra toi " + this.name + " " + this.address);
}
public String toString() {
return name + " " + address + " " + number;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public void setAddress(String newAddress) {
address = newAddress;
}
public int getNumber() {
return number;
}
}
Bây giờ, nếu chúng ta thử làm như sau:
/* Ten File : AbstractDemo.java */
public class AbstractDemo {
public static void main(String[] args) {
/* Phan sau la khong duoc phep va se tao mot error */
Employee e = new Employee("George W.", "Houston, TX", 43);
System.out.println("\n Goi mailCheck boi su dung tham chieu Employee --");
e.mailCheck();
}
}
Khi bạn biên dịch lớp trên, bạn sẽ nhận một lỗi:
Employee.java:46: Employee is abstract; cannot be instantiated
Employee e = new Employee("George W.", "Houston, TX", 43);
^
1 error
2. Kế thừa lớp Abstract trong Java
Chúng ta có thể kế thừa lớp Employee theo cách thông thường như sau:
/* Ten File : Salary.java */
public class Salary extends Employee {
private double salary; //Annual salary
public Salary(String name, String address, int number, double
salary) {
super(name, address, number);
setSalary(salary);
}
public void mailCheck() {
System.out.println("Ben trong mailCheck cua Salary class ");
System.out.println("Gui mail kiem tra toi " + getName() + " voi salary la " + salary);
}
public double getSalary() {
return salary;
}
public void setSalary(double newSalary) {
if (newSalary >= 0.0) {
salary = newSalary;
}
}
public double computePay() {
System.out.println("Tinh toan luong tra cho " + getName());
return salary / 52;
}
}
/* Ten File : AbstractDemo.java */
public class AbstractDemo {
public static void main(String[] args) {
Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
System.out.println("Goi mailCheck boi su dung tham chieu Salary --");
s.mailCheck();
System.out.println("\n Goi mailCheck boi su dung tham chieu Employee --");
e.mailCheck();
}
}
Nó sẽ cho kết quả sau:
Xay dung mot Employee
Xay dung mot Employee
Goi mailCheck boi su dung tham chieu Salary--Ben trong mailCheck cua Salary class
Gui mail kiem tra toi Mohd Mohtashim voi salary la 3600.0
Call mailCheck using Employee reference--Ben trong mailCheck cua Salary class
Gui mail kiem tra toi John Adams voi salary la 2400.
3. Phương thức của lớp Abstract trong Java
Nếu bạn muốn một lớp chứa một phương thức cụ thể nhưng bạn muốn triển khai thực sự phương thức đó để được quyết định bởi các lớp con, thì bạn có thể khai báo phương thức đó trong lớp cha ở dạng abstract.
Từ khóa abstract được sử dụng để khai báo một phương thức dạng abstract. Một phương thức gồm một chữ số, và không có thân phương thức.
public abstract class Employee {
private String name;
private String address;
private int number;
public abstract double computePay();
//Phan con lai cua dinh nghia class
}
Khai báo một phương thức dạng abstract tạo hai kết quả sau:
-
Lớp phải được khai báo abstract. Nếu một lớp chứa một phương thức abstract, thì lớp đó cũng phải là abstract.
-
Bất kỳ lớp con nào phải hoặc override phương thức abstract hoặc khai bao abstract chính nó.
Một lớp con mà kế thừa một phương thức abstract phải ghi đè nó. Nếu nó không, thì nó phải là abstract và bất kỳ lớp con nào của chúng phải override nó.
Cuối cùng, một lớp con phải triển khai phương thức abstract, nếu không thì bạn sẽ có một cấu trúc phân cấp của các lớp abstract mà không thể được khởi tạo.
Nếu Salary đang kế thừa lớp Employee, thì nó cần triển khai phương thức computePay() như sau:
/* Ten File : Salary.java */
public class Salary extends Employee {
private double salary; // Annual salary
public double computePay() {
System.out.println("Tinh toan luong tra cho " + getName());
return salary / 52;
}
//Phan con lai cua dinh nghia class
}
Trên đây là bài viết của eLib.VN về tính từu trượng trong Java. Sử dụng tính từu trượng cho đối tượng cho phép các lập trình viên tạo ra các công cụ hữu ích, có thể tái sử dụng, code sẽ tối ưu hơn. Bạn hãy thử áp dụng trong quá trình lập trình, chúc các bạn thành công!
Tham khảo thêm
- doc Đối tượng và lớp (class) trong Java
- doc Phương thức trong Java
- doc Nạp chồng phương thức trong Java
- doc Constructor trong Java
- doc Từ khóa static trong Java
- doc Từ khóa this trong Java
- doc Tính kế thừa trong Java - Từ khóa extends và implements trong Java
- doc Ghi đè phương thức trong Java
- doc Kiểu trả về covariant trong Java
- doc Từ khóa super trong Java
- doc Từ khóa final trong Java
- doc Tính đa hình trong Java
- doc Gắn kết tĩnh và Gắn kết động (Dynamic Binding) trong Java
- doc Toán tử instanceof trong Java
- doc Abstract Class trong Java
- doc Interface trong Java
- doc Phân biệt lớp abstract và Interface trong Java
- doc Package trong Java
- doc Các kiểu Modifier trong Java
- doc Access Modifier trong Java
- doc Non Access Modifier trong Java
- doc Tính đóng gói trong Java
- doc Lớp Object trong Java
- doc Nhân bản đối tượng trong Java
- doc Mảng (Array) trong Java
- doc Lớp Wrapper trong Java
- doc Truyền giá trị và tham chiếu trong Java
- doc Từ khóa strictfp trong Java
- doc Regular Expression trong Java