Skip to main content

Command Palette

Search for a command to run...

Bài 6: Lớp và Đối tượng (Classes and Objects) trong Java

Published
5 min readView as Markdown

I. Constructor

Định nghĩa Constructor:

Constructor là một phương thức đặc biệt được gọi khi một đối tượng của lớp được tạo ra. Constructor có tên trùng với tên lớp và không có kiểu trả về (ngay cả void). Constructor được sử dụng để khởi tạo các thuộc tính của đối tượng.

Các loại Constructor:

  1. Default Constructor (Constructor mặc định):

    • Được cung cấp bởi Java nếu không có constructor nào được định nghĩa trong lớp.

    • Không có tham số.

  2. Parameterized Constructor (Constructor có tham số):

    • Được định nghĩa bởi lập trình viên.

    • Chấp nhận các tham số để khởi tạo đối tượng với các giá trị cụ thể.

Constructor Chaining:

Constructor chaining xảy ra khi một constructor gọi một constructor khác trong cùng một lớp hoặc lớp cha. Điều này được thực hiện bằng cách sử dụng từ khóa this hoặc super.

Ví dụ cụ thể:

public class Person {
    private String name;
    private int age;

    // Default Constructor
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // Parameterized Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Constructor Chaining
    public Person(String name) {
        this(name, 0); // Gọi constructor có tham số (String, int)
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person("Alice", 30);
        Person person3 = new Person("Bob");

        System.out.println("Person1: " + person1.getName() + ", " + person1.getAge());
        System.out.println("Person2: " + person2.getName() + ", " + person2.getAge());
        System.out.println("Person3: " + person3.getName() + ", " + person3.getAge());
    }
}

II. Overloading

Phương thức Overloading (Nạp chồng phương thức):

Overloading xảy ra khi một lớp có nhiều phương thức cùng tên nhưng khác nhau về danh sách tham số (số lượng hoặc kiểu dữ liệu của tham số). Overloading giúp cải thiện tính linh hoạt và khả năng đọc của mã nguồn.

Constructor Overloading (Nạp chồng constructor):

Constructor overloading là khi một lớp có nhiều constructor với cùng tên nhưng khác nhau về danh sách tham số. Điều này cho phép tạo các đối tượng với các cách khởi tạo khác nhau.

Ví dụ cụ thể:

public class Calculator {

    // Overloaded method for adding two integers
    public int add(int a, int b) {
        return a + b;
    }

    // Overloaded method for adding three integers
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // Overloaded method for adding two double values
    public double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        Calculator calc = new Calculator();

        System.out.println("Sum of two integers: " + calc.add(5, 10));
        System.out.println("Sum of three integers: " + calc.add(5, 10, 15));
        System.out.println("Sum of two doubles: " + calc.add(5.5, 10.5));
    }
}

III. Overriding

Phương thức Overriding (Ghi đè phương thức):

Overriding xảy ra khi một lớp con định nghĩa lại một phương thức của lớp cha với cùng tên, cùng kiểu trả về và cùng danh sách tham số. Overriding cho phép lớp con cung cấp cách triển khai cụ thể cho phương thức đó.

Sử dụng super keyword:

Từ khóa super được sử dụng để gọi phương thức của lớp cha từ lớp con, đặc biệt hữu ích khi cần giữ lại một phần hành vi của lớp cha trong phương thức ghi đè.

Ví dụ cụ thể:

class Animal {
    void sound() {
        System.out.println("This animal makes a sound.");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        super.sound(); // Gọi phương thức sound() của lớp cha
        System.out.println("The dog barks.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.sound(); // Gọi phương thức sound() của Dog
    }
}

IV. Bài tập thực hành

Bài tập: Tạo một hệ thống quản lý sản phẩm sử dụng các khái niệm constructor, overloading và overriding.

Yêu cầu:

  1. Tạo một lớp Product với các thuộc tính id, name, và price.

  2. Định nghĩa các constructor cho lớp Product, bao gồm constructor mặc định và constructor có tham số.

  3. Tạo lớp Electronics kế thừa từ lớp Product và ghi đè phương thức displayDetails.

  4. Định nghĩa các phương thức displayDetails để hiển thị thông tin sản phẩm.

  5. Viết chương trình chính để tạo các đối tượng và hiển thị thông tin của chúng.

Mã nguồn mẫu:

class Product {
    private int id;
    private String name;
    private double price;

    // Default Constructor
    public Product() {
        this.id = 0;
        this.name = "Unknown";
        this.price = 0.0;
    }

    // Parameterized Constructor
    public Product(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public void displayDetails() {
        System.out.println("Product ID: " + id);
        System.out.println("Product Name: " + name);
        System.out.println("Product Price: $" + price);
    }
}

class Electronics extends Product {
    private String brand;

    // Constructor chaining
    public Electronics(int id, String name, double price, String brand) {
        super(id, name, price);
        this.brand = brand;
    }

    @Override
    public void displayDetails() {
        super.displayDetails();
        System.out.println("Brand: " + brand);
    }
}

public class Main {
    public static void main(String[] args) {
        Product product = new Product(1, "Generic Product", 100.0);
        Electronics laptop = new Electronics(2, "Laptop", 1500.0, "Dell");

        System.out.println("Product Details:");
        product.displayDetails();
        System.out.println();

        System.out.println("Electronics Details:");
        laptop.displayDetails();
    }
}

Tổng kết

Bài học này cung cấp một cái nhìn chi tiết về lớp và đối tượng trong Java, bao gồm constructor, overloading, overriding và cách sử dụng chúng trong lập trình. Việc nắm vững các khái niệm này sẽ giúp bạn xây dựng các hệ thống phần mềm linh hoạt và mạnh mẽ, cải thiện hiệu quả phát triển phần mềm.

More from this blog

devngu

169 posts