Cách sử dụng các lớp và phương thức "Tóm tắt" của Java
Abstraction
là một trong ba nguyên tắc cốt lõi trong lập trình hướng đối tượng - cùng với tính đóng gói và kế thừa.
Tính trừu tượng là một cách để giảm độ phức tạp của chương trình và làm cho mã của bạn dễ đọc hơn. Trong Java, tính trừu tượng cho phép bạn:
- chỉ hiển thị một số chi tiết nhất định của một lớp và
- ẩn tất cả các chi tiết khác của lớp đó.
Tính trừu tượng có thể được áp dụng cho cả các lớp và phương thức trong Java.
Hướng dẫn này sẽ thảo luận về những điều cơ bản của trừu tượng trong Java, cách sử dụng các lớp trừu tượng và cách sử dụng các phương thức trừu tượng. Chúng tôi cũng sẽ giới thiệu cho các bạn một vài ví dụ để giúp bạn hiểu rõ hơn về khái niệm quan trọng này.
Tóm tắt Java
Lập trình hướng đối tượng là kiểu lập trình sử dụng các đối tượng và lớp để biểu diễn dữ liệu và phương thức. Sử dụng các đối tượng và lớp có thể giảm bớt sự lặp lại trong mã và có thể làm cho chương trình hiệu quả hơn.
Java là một ngôn ngữ lập trình hướng đối tượng. Như vậy, nó bao gồm một số tính năng được sử dụng để làm việc với các đối tượng và lớp. Tính trừu tượng là một trong những tính năng đó. Tính trừu tượng cho phép bạn chỉ hiển thị một số thông tin nhất định cho một lớp trong Java.
Có hai trường hợp mà tính trừu tượng được sử dụng trong Java:trong các lớp và trong các phương thức.
Các lớp trừu tượng của Java
Trong Java, một lớp trừu tượng là một lớp mà từ đó bạn không thể tạo bất kỳ đối tượng nào. Nói cách khác, không thể khởi tạo các lớp trừu tượng.
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
Để tạo một lớp trừu tượng trong Java, bạn có thể sử dụng từ khóa trừu tượng. Dưới đây là một ví dụ về một lớp trừu tượng trong Java:
abstract class BankAccount { // Code here }
Vì đây là một lớp trừu tượng, nếu chúng ta cố gắng tạo một đối tượng với lớp này, chương trình của chúng ta sẽ trả về một lỗi.
Ví dụ:giả sử chúng ta cố gắng tạo một phiên bản của một lớp có tên là BankAccount. Chúng tôi muốn gọi phiên bản này là lucyAccount và chúng tôi muốn nó lưu trữ thông tin ngân hàng của Lucy. Lucy là một trong những khách hàng của chúng tôi. Chúng tôi sử dụng mã sau để cố gắng tạo phiên bản này:
BankAccount lucyAccount = new BankAccount();
Tuy nhiên, khi chúng tôi chạy mã này, chương trình của chúng tôi trả về:
BankAccount is abstract; cannot be instantiated
Như bạn thấy, bạn không thể gán các lớp trừu tượng cho một đối tượng.
Tuy nhiên, bạn vẫn có thể tạo các lớp con từ các lớp trừu tượng. Trong phần tiếp theo, chúng ta sẽ thảo luận về cách tạo các lớp con từ các lớp trừu tượng.
Kế thừa lớp Tóm tắt
Như chúng tôi đã đề cập, bạn không thể gán các đối tượng một lớp trừu tượng. Vì vậy, để truy cập nội dung của một lớp trừu tượng — nói cách khác, các thuộc tính và phương thức được liên kết với lớp đó — chúng ta phải inherit
lớp học.
Giả sử chúng ta đang tạo một chương trình lưu trữ thông tin tài khoản ngân hàng cho một ngân hàng. Chương trình của chúng tôi sẽ bao gồm hai lớp:Tài khoản Ngân hàng và Tài khoản Kiểm tra. BankAccount sẽ là một lớp cha lưu trữ các thuộc tính và phương thức để làm việc với tài khoản ngân hàng. CheckAccount sẽ là một lớp con kế thừa các phương thức đó.
Đối với ví dụ này, BankAccount là một lớp trừu tượng. Chúng tôi chỉ muốn sử dụng nó để tạo tài khoản séc.
Đây là mã chúng tôi có thể sử dụng để làm việc với các lớp BankAccount và CheckAccount:
abstract class BankAccount { public void viewAccountNumber() { System.out.println("Account number: #1932042"); } } class CheckingAccount extends BankAccount { } class Main { public static void main(String[] args) { CheckingAccount lucyAccount = new CheckingAccount(); lucyAccount.viewAccountNumber(); } }
Mã của chúng tôi trả về:
Account number: #1932042
Trong ví dụ này, chúng tôi đã tạo ba lớp:
- Tài khoản Ngân hàng . Đây là một lớp trừu tượng. Nó chứa một phương thức được gọi là
viewAccountNumber()
. Vì BankAccount là một lớp trừu tượng nên chúng ta không thể tạo một đối tượng của lớp. - Tài khoản Kiểm tra . Đây là một lớp học trẻ em. Là một lớp con, nó kế thừa các thuộc tính và phương thức của lớp BankAccount.
- Chính . Lớp này chứa mã cho chương trình chính của chúng ta.
Trong chương trình chính của chúng tôi, chúng tôi tạo một phiên bản của lớp CheckAccount và gọi nó là lucyAccount. lucyAccount là một đối tượng. Sau khi tạo ba lớp trong chương trình của mình, chúng tôi đã sử dụng đối tượng lucyAccount trong phương thức viewAccountNumber()
.
Bảng sau đây tóm tắt các phần chính của ví dụ này:
NAME | LOẠI | MÔ TẢ |
Tài khoản ngân hàng | trừu tượng / lớp cha | Lưu trữ các thuộc tính và phương pháp để làm việc với tài khoản ngân hàng. |
Tài khoản Kiểm tra | lớp con | Kế thừa các phương thức của lớp cha. |
Chính | lớp | Chứa mã cho chương trình chính của chúng tôi. |
lucyAccount | đối tượngỨng dụng trong thế giới thực của chương trình của chúng tôi. |
Nếu bạn muốn tìm hiểu thêm về kế thừa trong Java, hãy đọc hướng dẫn đầy đủ của chúng tôi tại đây.
Phương thức Tóm tắt Java
Ngoài các lớp, các phương thức cũng có thể trừu tượng.
Khi bạn khai báo một phương thức trừu tượng, bạn sử dụng cùng một từ khóa trừu tượng như trên. Bạn không chỉ định bất kỳ nội dung nào và bạn chỉ có thể khai báo một phương thức trừu tượng trong một lớp trừu tượng.
Dưới đây là một ví dụ về một phương thức trừu tượng trong Java:
abstract void checkBalance();
Trong ví dụ này, chúng tôi đã tạo một phương thức trừu tượng có tên là checkBalance()
. Phương thức này không có nội dung — nói cách khác, không có mã nào được liên kết với phương thức.
Hãy quay lại ví dụ về ngân hàng của chúng ta ở phần trước. Chương trình đó chứa một phương thức trừu tượng:lucyAccount.viewAccountNumber();
.
Chúng tôi đã sử dụng phương pháp trừu tượng này để cho phép chương trình của chúng tôi hiển thị số tài khoản ngân hàng của khách hàng. Trong ví dụ trên (từ phần trước), lớp cha BankAccount hoạt động như một loại mẫu cho (các) lớp con.
Trong trường hợp này, các lớp con là các loại tài khoản ngân hàng khác nhau. Điều này là do khách hàng của chúng tôi có thể có nhiều hơn một loại tài khoản ngân hàng và chúng tôi có thể muốn thực hiện cùng một chức năng trên mỗi loại tài khoản. Lớp con mà chúng tôi đã tạo ở trên là:Kiểm tra tài khoản.
Hãy quay lại với khách hàng của chúng ta từ ví dụ trên. Lucy có một tài khoản séc, nhưng cô ấy cũng có thể có một tài khoản tiết kiệm và một tài khoản môi giới. Chúng tôi muốn có thể hiển thị số tài khoản cho từng tài khoản của Lucy. Chúng tôi có thể làm như vậy bằng cách tạo các lớp con cho hai loại tài khoản bổ sung này. Chúng ta có thể gọi chúng là:SavingsAccount, BrokerageAccount.
Vì chúng tôi đã tạo lớp cha BankAccount, nên chúng tôi có thể hiển thị số tài khoản lặp lại mã một cách hiệu quả và tối thiểu cho cả ba loại tài khoản.
Trong đoạn mã dưới đây, chúng tôi sử dụng từ khóa trừu tượng hai lần. Đầu tiên, chúng ta khai báo một lớp trừu tượng (BankAccount). Sau đó, chúng tôi khai báo một phương thức trừu tượng mà sau này sẽ giúp chúng tôi hướng chương trình hiển thị (các) số tài khoản của khách hàng. Khai báo phương thức trừu tượng đó là:abstract void viewAccountNumber();
. Sau đó, chúng tôi khởi tạo viewAccountNumber()
trên lớp con CheckAccount. Đây là mã:
abstract class BankAccount { abstract void viewAccountNumber(); } class CheckingAccount extends BankAccount { public void viewAccountNumber() { System.out.println("Checking account number: #1932042"); } } class Main { public static void main(String[] args) { CheckingAccount lucyAccount = new CheckingAccount(); lucyAccount.viewAccountNumber(); } }
Mã của chúng tôi trả về:
Checking account number: #1932042
Ví dụ này trả về cùng một kết quả như ví dụ trước đó của chúng tôi, nhưng có một số khác biệt về mã cần lưu ý. Đó là:
- Khai báo phương thức trừu tượng. Trong ví dụ ở đây, chúng tôi khai báo một lớp trừu tượng có tên là BankAccount. Lớp này chứa một phương thức trừu tượng được gọi là
viewAccountNumber()
. - Mở rộng của phương pháp trừu tượng. Chúng tôi mở rộng lớp BankAccount thông qua lớp CheckAccount. Lớp CheckAccount kế thừa các giá trị được lưu trữ trong phương thức BankAccount.
Trong lớp CheckAccount, chúng tôi xác định một phương thức — được gọi là viewAccountNumber()
—Điều đó chỉ có thể truy cập được đối với các đối tượng CheckAccount. Sau đó, để xem số tài khoản của khách hàng, chúng tôi tạo đối tượng Kiểm tra tài khoản.
Ví dụ về Java Tóm tắt
Bây giờ chúng ta đã thảo luận về cả các lớp trừu tượng Java và các phương thức trừu tượng, chúng ta có thể khám phá một ví dụ đầy đủ về tính trừu tượng trong Java. Để làm như vậy, chúng ta sẽ tập hợp mọi thứ chúng ta đã thảo luận trong các ví dụ về tài khoản ngân hàng ở trên.
Giả sử chúng ta đang điều hành một ngân hàng cung cấp hai loại tài khoản ngân hàng:tài khoản séc và tài khoản tiết kiệm. Chúng tôi quyết định viết một chương trình cho phép chủ tài khoản ngân hàng kiểm tra số tài khoản của họ.
Tại ngân hàng của chúng tôi, nếu tài khoản ngân hàng là tài khoản séc, số tài khoản bắt đầu bằng số ID của khách hàng và kết thúc bằng 555. Nếu tài khoản là tài khoản tiết kiệm, số tài khoản kết thúc bằng 777.
Chúng tôi có thể sử dụng mã sau để tạo chương trình này:
abstract class BankAccount { abstract void viewAccountNumber(); } class CheckingAccount extends BankAccount { public void viewAccountNumber() { System.out.println("Checking account number: #1932042555"); } } class SavingsAccount extends BankAccount { public void viewAccountNumber() { System.out.println("Savings account number: #1932042777"); } } class Main { public static void main(String[] args) { CheckingAccount ellieCheckingAccount = new CheckingAccount(); ellieCheckingAccount.viewAccountNumber() SavingsAccount ellieSavingsAccount = new SavingsAccount(); ellieSavingsAccount.viewAccountNumber(); } }
Mã của chúng tôi trả về:
Checking account number: #1932042555 Savings account number: #1932042777
Trong ví dụ này, chúng tôi đã tạo một lớp và gọi nó là BankAccount. Lớp này có một phương thức trừu tượng, được gọi là viewAccountNumber()
.
Mỗi loại tài khoản chỉ định số tài khoản khác nhau, vì vậy chúng tôi không thể triển khai viewAccountNumber()
trong lớp BankAccount. Thay vào đó, mỗi lớp con của lớp BankAccount triển khai viewAccountNumber()
phương pháp.
Trong ví dụ này, lớp CheckAccount chỉ định số tài khoản là một số bắt đầu bằng ID của khách hàng và kết thúc bằng 555. Lớp SavingsAccount chỉ định số tài khoản là một số bắt đầu bằng ID của khách hàng và kết thúc bằng 777.
Trong mã của chúng tôi, chúng tôi khởi tạo một phiên bản của lớp Kiểm tra tài khoản cho một khách hàng có tên là Ellie. Phiên bản này được gán tên ellieCheckingAccount và chúng tôi gọi viewAccountNumber()
phương pháp để xem số của tài khoản. Điều này trả về:
Checking account number: #1932042555
Chúng tôi cũng khởi tạo một phiên bản của lớp SavingsAccount, được gọi là ellieSavingsAccount và chúng tôi gọi viewAccountNumber()
phương pháp để xem số của tài khoản. Điều này trả về:
Savings account number: #1932042777
Kết luận
Abstraction
là một tính năng quan trọng của lập trình hướng đối tượng. Nó cho phép bạn ẩn các chi tiết nhất định trong một lớp hoặc phương thức và chỉ hiển thị thông tin cần thiết. Để tạo các lớp và phương thức trừu tượng trong Java, hãy sử dụng abstract
từ khóa.
Hướng dẫn này đã thảo luận, với các ví dụ, cách trừu tượng hoạt động, tại sao trừu tượng lại hữu ích và cách bạn có thể tạo các phương thức và lớp trừu tượng trong Java. Bây giờ, bạn đã sẵn sàng để bắt đầu làm việc với các lớp và phương thức trừu tượng trong Java như một lập trình viên chuyên nghiệp!