Ôn tập: bộ đếm và tiện ích
Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 19 trên 87.
Thử thách
DễHãy xây dựng một hệ thống hoàn chỉnh kết hợp lớp Counter để theo dõi các đối tượng với lớp tiện ích MathUtils, qua đó tổng hợp mọi kiến thức bạn đã học về biến tĩnh (static variable), phương thức tĩnh (static method), khối tĩnh (static block) và hằng số (constant).
Bạn sẽ tạo ba tệp để sắp xếp code:
Counter.java: Tạo một lớp theo dõi số lượng đối tượng đã được tạo:- Một biến tĩnh riêng tư để đếm tổng số đối tượng
- Một biến đối tượng riêng tư
idđể lưu mã định danh duy nhất của mỗi bộ đếm - Một hàm khởi tạo tăng tổng số lượng lên 1 và gán số lượng hiện tại làm mã định danh của đối tượng này
- Một phương thức
getId()trả về mã định danh duy nhất của bộ đếm này - Một phương thức tĩnh
getTotalCount()trả về số lượng đối tượngCounterđã được tạo
MathUtils.java: Tạo một lớp tiện ích chỉ có các thành viên tĩnh, không bao giờ tạo đối tượng từ lớp này:- Một hằng số công khai
PIcó giá trị3.14159 - Một hằng số công khai
HALFcó giá trị0.5 - Một phương thức tĩnh
square(int n)trả về bình phương của n - Một phương thức tĩnh
cube(int n)trả về lập phương của n - Một phương thức tĩnh
circleArea(double radius)trả về PI * radius * radius
- Một hằng số công khai
Main.java: Minh họa cách hai lớp phối hợp với nhau. Bạn sẽ nhận hai đầu vào: một số dùng cho các phép tính và số lượng đối tượngCountercần tạo. In ra các dòng sau:Square: [value]Cube: [value]Circle area (radius=[number]): [value](diện tích được định dạng với 2 chữ số thập phân)- Với mỗi đối tượng
Counterđược tạo, in ra:Counter [id] created - Cuối cùng:
Total counters: [count]
Bạn sẽ nhận hai đầu vào: một số (int) dùng cho các phép tính và một số lượng (int) cho biết cần tạo bao nhiêu đối tượng Counter.
Hãy truy cập các thành viên tĩnh thông qua tên lớp, chẳng hạn như MathUtils.PI và Counter.getTotalCount(), đồng thời dùng String.format("%.2f", value) để định dạng các giá trị thập phân.
Tự làm thử
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int count = scanner.nextInt();
// TODO: Dùng các phương thức tĩnh của MathUtils để tính và in ra:
// - Bình phương: [value]
// - Lập phương: [value]
// Circle area (radius=[number]): [value] (định dạng đến 2 chữ số thập phân)
// TODO: Tạo 'count' đối tượng Counter
// Với mỗi đối tượng Counter được tạo, in ra: Counter [id] created
// TODO: In ra tổng số bộ đếm đã tạo
// Total counters: [count]
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online