Hướng dẫn chi tiết cách sử dụng lớp trừu tượng Java

Lớp trừu tượng trong Java được biết đến là một kiểu lớp đặc biệt chứa các phương thức trừu tượng. Đây là một khái niệm rất hữu ích trong lập trình hướng đối tượng nói chung và Java nói riêng. Để có thể sử dụng được lớp trừu tượng Java một cách tốt nhất thì cùng Box.edu tìm hiểu kỹ hơn ở bài viết này nhé!

Mục lục bài viết

Tổng quan về lớp trừu tượng Java

tong-quan-ve-lop-truu-tuong-java.jpg

Tổng quan về lớp trừu tượng Java

Có một khái niệm trong lập trình hướng đối tượng (OOP) còn được gọi là ‘trừu tượng hóa’Phương thức này sẽ cho phép các nhà lập trình viên tạo một lớp không thể khởi tạo được.

Một điều bạn có thể dễ dàng nhận biết đó là kế thừa trong OOP là một tính năng cho phép một lớp sử dụng các thành viên của lớp khác và bổ sung cho chúng các khả năng mới. Ngoài ra bạn cũng có thể nhớ rằng các lớp con lấy các thành viên của chúng từ các lớp cha.

Thông thường một lớp trừu tượng chỉ là một lớp cha cho phép các lớp khác kế thừa từ nó để mỗi lớp con có thể chia sẻ một thiết kế chung. Các lập trình viên thường sẽ thích sử dụng các lớp trừu tượng để giảm đi sự phụ thuộc vào một loạt các kiểu lớp con.

                trừu tượng trả về kiểu phương thức-tên (tham số-danh sách);

Ngoài ra nếu bạn muốn bao gồm một phương thức trừu tượng trong một lớp, bạn cũng phải khai báo lớp đó là trừu tượng. Dưới đây là cách mà các bạn có thể tạo các lớp trừu tượng.

                lớp trừu tượng công khai {

                                public abstract return-type method-name (tham số-danh sách);

                }

Ví dụ về lớp trừu tượng Java

Có một điều chắc chắn đó là để có thể học bất kỳ một ngôn ngữ lập trình nào thì các bạn cần tìm các ví dụ và thực hành theo nó. 

Giả sử bạn đã được bộ phận nhân sự của một công ty địa phương thuê để tạo một chương trình tính toán mức lương của các nhân viên khác nhau. Lương sẽ được tính theo tháng và có 3 loại nhân viên tại công ty. 

  • Người lao động được trả lương cố định hàng tháng
  • Nhân viên được trả lương theo giờ. Họ cũng được trả một số tiền vượt quá nếu họ làm hơn 168 giờ trong một tháng
  • Nhân viên làm việc theo mức hoa hồng. Họ nhận được phần trăm doanh số hàng tháng nhất định

Nhiệm vụ bây giờ là các bạn sẽ tạo các lớp riêng biệt cho từng loại trong số ba kiểu nhân viên. Chúng tôi sẽ đặt tên cho cái đầu tiên là fixedSalary, giờ thứ hai là hourlySalary và cái thứ ba là CommissionPay.

Cách thêm lớp trừu tượng

Mặc dù họ có thể được trả với mức lương khác nhau, tuy nhiên tất cả ba loại nhân viên đều có thể được nhóm lại với nhau dưới một tiêu đề lớn hơn được gọi là nhân viên. Hay nói cách khác, đây là các lớp con của một lớp cha.

Để nhóm những nhân viên này lại với nhau, chúng ta sẽ tạo một lớp cha trừu tượng có tên là Nhân viên. Lớp cha này sẽ chứa tất cả các thuộc tính và được tự động chia sẻ với ba lớp con riêng biệt, ví dụ như: tên, số an sinh xã hội…

public abstract class Nhân viên {

                 private String firstName;

                 private String lastName;

                 private String securityNumber;

                 công nhân viên (Chuỗi đầu tiên, Chuỗi cuối cùng, Chuỗi ssn)

                 {

                                 firstName = đầu tiên;

                                 lastName = cuối cùng;

                                 securityNumber = ssn;

                 } // hàm tạo kết thúc

                                / ** setters * /

                 public void setFirstName (Chuỗi đầu tiên) {

                                 firstName = đầu tiên;

                 }

                 public void setLastName (String last) {

                                 lastName = cuối cùng;

                 }

                 public void setSecurityNumber (String ssn) {                                

                          securityNumber = ssn

                 }

                                / ** getters * /

                 public String getFirstName () {

                                 return firstName;
                 }

                 public String getLastName () {

                                 trả lại lastName;

                 }

                 public String getSecurityNumber () {

                                 trả lại securityNumber;

                 }

                 // trả về chuỗi đối tượng

                 public String toString ()

                 {

                                 return String.format (“% s% s \ nsocial security number:% s”, getFirstName (), getLastNam

(), getSecurityNumber ());

                                 //% s là một định dạng đặc biệt nhận giá trị được giữ trong

                                 // ba phương thức được liệt kê tương ứng

                 }

                 thu nhập kép trừu tượng công khai (); // phương thức này sẽ được thay đổi với mỗi lớp con

} // kết thúc lớp trừu tượng Employee

Ở đây các bạn đã tạo lớp trừu tượng Nhân viên và có 3 trường là: firstName, lastName và securityNumber. Nên biết rằng thông thường sẽ đặt các trường này ở chế độ riêng tư hoặc được bảo vệ. Sau đó, bạn đặt các nhân viên xây dựng mặc định là Nhân viên. Tiếp theo sẽ có những người định cư và những người sắp xếp của các bạn. Tuy nhiên, bạn sẽ thấy rằng hai phương thức mà bạn có thể không biết đó là phương thức thu nhập () và toString (). Mới đầu nhìn thì có vẻ như chúng ta không nên quan tâm đến những gì thu nhập () trong lớp vì nó sẽ không được gọi. Tuy nhiên, các lớp con của Nhân viên sẽ ghi đè lên thu nhập (), do đó mà việc triển khai là không cần thiết. 

Do vậy 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 việc triển khai phương thức đó được xác định bởi các lớp con, thì bạn cần làm cho phương thức này trở nên trừu tượng. Các phương thức trừu tượng bao gồm một chữ ký phương thức, nhưng không có thân phương thức. Khi khai báo một phương thức trừu tượng, lớp cũng phải được khai báo trừu tượng. Phương thức trừu tượng sẽ buộc các lớp con ghi đè nó, nếu không thì lớp con đó cũng phải trừu tượng và bất kỳ lớp con nào cũng phải ghi đè lên nó. Cuối cùng, một lớp con phải triển khai phương thức trừu tượng hoặc bạn sẽ có một hệ thống phân cấp các lớp trừu tượng không thể được khởi tạo.

Phương thức toString () trả về một chuỗi chứa tên, họ và số an sinh xã hội của nhân viên. Trong đó % s là một trình định dạng chuỗi nhận giá trị đang được giữ trong các biến theo sau chuỗi và đặt giá trị ở đó thay cho chuỗi. Bạn sẽ nhận thấy rằng có 3 định dạng được nhìn thấy trong một chuỗi, tiếp theo là ba biến. Định dạng đầu tiên sẽ được thay thế bằng giá trị được giữ trong biến phương thức đầu tiên, định dạng thứ hai thay thế bằng giá trị được giữ trong biến thứ hai.

Lớp con fixedSalary

lop-con-fixedsalary.jpg

Lớp con fixedSalary

Nếu bạn nhìn vào đoạn mã bên dưới, bạn sẽ thấy rằng khi đặt tên cho lớp fixedSalary, chúng ta đã sử dụng từ khóa expand. Bạn có thể xem nó như sau: lớp con là phần mở rộng của lớp cha. Lớp chứa hàm tạo mặc định lấy tên, họ và số an sinh xã hội làm đối số. Nó chứa một bộ định thời gán một số nguyên cho một biến thể hiện, monthSalary. Và nó cũng chứa một getter trả về giá trị monthSalary và phương thức thu nhập ghi đè cùng một phương pháp trong lớp trên và tính toán thu nhập của nhân viên theo kiểu trả lương cố định. Nếu phương thức thu nhập không được triển khai thì lớp đó là lớp trừu tượng, nếu không sẽ xảy ra lỗi biên dịch.

Lớp trừu tượng Java theo giờ

Lớp này cũng mở rộng lớp Nhân viên, bao gồm hàm tạo mặc định nhận làm đối số là tên, họ, số an sinh xã hội, mức lương theo giờ và số giờ làm việc trong một tuần cụ thể. Các setters setPay và setHours gán các giá trị mới cho các trường pay và giờ. Và setPay đảm bảo rằng giá trị thanh toán không bị âm, còn setHours đảm bảo rằng tổng số giờ là 0 đến 672 giờ, là số giờ trong một tháng. Phương thức toString () gọi cùng một phương thức từ lớp cha, cho phép nó lấy thông tin cụ thể của lớp cha, trong trường hợp này là họ và tên.

Lớp con của CommissionPay

hoa hồng cấp công cộng Trả tiền mở rộng Nhân viên {

        tư nhân đôi thángSales; // doanh số mỗi tháng

        dấu phẩy kép riêng tư; // phần trăm hoa hồng

        hoa hồng công khai

                 siêu (đầu tiên, cuối cùng, ssn);

                 setmonthSales (bán hàng);

                 setcommRate (tỷ lệ);

        } // end constructor mặc định

                        / * setters * /

        public void setcommRate (tỷ lệ gấp đôi) {

                 commRate = (tỷ lệ> 0,0 && tỷ lệ <1,0)? tỷ lệ: 0,0;

        }

        public void setmonthSales (bán hàng gấp đôi) {

                 monthSales = (doanh số bán hàng <0.0)? 0,0: doanh số bán hàng;

        }

                      / * getters * /

        public double getcommRate () {

                trả về commRate;

        }

        public double getmoonthSales () {

                tháng trở lại Bán hàng;

        }

        //tính toán

        thu nhập gấp đôi công khai () {

                 trả về getcommRate () * getmonthSales ();

        }

        // trả về chuỗi

        public String toString () {

                 return String.format (“% s:% s \ n% s: $%, f;% s:% .f”,

                          "Nhân viên hoa hồng", super.toString (), "tổng doanh thu", getmonthSales (),

                          "Tỷ lệ hoa hồng", getcommRate ());

        } // kết thúc phương thức toString

} // lớp kết thúc

Chạy chương trình

Khi đã viết toàn bộ chương trình của mình, đã đến lúc chạy nó. Chúng tôi đã tạo gần 200 dòng mã cho đến nay và 3 lớp con cùng một lớp trừu tượng. Khi chúng ta chạy chương trình, nó sẽ thao tác các đối tượng được thực hiện thông qua ba lớp con mà chúng ta đã tạo trước đó thông qua các biến thuộc kiểu riêng của từng đối tượng, sau đó lại sử dụng một mảng các biến Nhân viên.

Sau khi thực hiện chương trình sẽ xác định và đưa ra loại đối tượng trong mảng Nhân viên theo tính đa hình. Lưu ý các mảng được sử dụng trong mã của chúng tôi cộng với các phần tử được gọi và thao tác. Sao chép và dán đoạn mã dưới đây và xem những gì bạn nhận được. 

lớp công khai PayrollProgramTest {

          public static void main (String [] args) {

                  // tạo các đối tượng cho mỗi lớp con

                  fixedSalary fixedSalary =

                        mới fixedSalary (“Clark”, “Kent”, “555-999-5555”, 15000.00);

                  hourlySalary hourlySalary =

                        mới theo giờSalary (“Bruce”, “Wayne”, “555-777-1111”, 20.00, 165);

                  hoa hồngPay hoa hồngPay =

                        mới hoa hồngPay (“Peter”, “Parker”, “555-111-5555”, 95000, 0,06);

                  // In tên

                  System.out.printf (“% s \ n% s: $%, f \ n \ n”,

                         fixedSalary, “kiếm được”, fixedSalary.earnings ());

                  System.out.printf (“% s \ n% s: $%, f \ n \ n”,

                         hourlySalary, "kiếm được", giờlySalary.earnings ());

                  System.out.printf (“% s \ n% s: $%, f \ n \ n”,

                         CommissionPay, “kiếm được”, CommissionPay.earnings ());

                  // tạo mảng Nhân viên ba phần tử

                  Nhân viên [] Nhân viên = Nhân viên mới [3];

                  Nhân viên [0] = fixedSalary;

                  Nhân viên [1] = hourlySalary;

                  Nhân viên [2] = CommissionPay;

                  // xử lý chung từng phần tử trong mảng Nhân viên

                  cho (Nhân viên hiện tại

                           System.out.println (Người lao động hiện tại); // gọi toString

                           System.out.printf (“đã kiếm được $%, f \ n \ n”, currentErantyees.earnings ());

                  } // kết thúc cho

       } // kết thúc chính

} // end class PayrollSystemTest

Vậy là bạn đã hoàn thành một chương trình Java hoàn chỉnh. Hãy thử chạy nó và xem đầu ra trông như thế nào. Nếu bạn gặp bất kỳ lỗi nào, hãy xem lại mã và kiểm tra lỗi chính tả.

Tổng kết

Box.edu mong rằng đã đem lại cho các bạn những thông tin quan trọng về lập trình Java. Đặc biệt là lớp trừu tượng Java một trong những điểm cần lưu ý khi thực thi chương trình. Và cũng giúp ích cho các bạn muốn học Java hiệu quả.

5/5 - (20 bình chọn)
Xin chào các bạn! Mình là Hà Nguyên Phương Hiện đang là tác giả của Box.edu.vn website nổi tiếng chuyên review, đánh giá, giới thiệu các khóa học hay nhất hiện nay.