Đối tượng (Object) trong Java là gì?

Đối tượng (object) là một khái niệm cốt lõi trong lập trình hướng đối tượng (OOP) và Java là một ngôn ngữ lập trình hướng đối tượng. Đối tượng cho phép bạn mô phỏng các thực thể trong thế giới thực, từ đó tạo ra mã có tổ chức, dễ quản lý và bảo trì. Bài viết này sẽ khám phá khái niệm đối tượng trong Java, cách thức hoạt động của chúng, cũng như vai trò của chúng trong lập trình OOP.

Khái niệm đối tượng

Đối tượng trong Java là một thực thể cụ thể được tạo ra từ một lớp (class). Nó có các thuộc tính (attributes) và phương thức (methods) riêng. Đối tượng có thể đại diện cho bất kỳ thực thể nào, từ một sinh vật sống đến một khái niệm trừu tượng. Trong Java, mọi thứ đều được xem như là đối tượng, từ số nguyên, chuỗi cho đến các lớp do người dùng định nghĩa.

1. Lớp và đối tượng

Để hiểu rõ hơn về đối tượng, trước tiên chúng ta cần biết đến lớp. Lớp là một bản thiết kế (blueprint) mô tả các thuộc tính và phương thức mà các đối tượng thuộc lớp đó sẽ có. Một lớp có thể chứa nhiều đối tượng, và mỗi đối tượng có thể có giá trị khác nhau cho các thuộc tính của nó.

class Dog {
    String name; // Thuộc tính
    int age;     // Thuộc tính

    // Phương thức
    void bark() {
        System.out.println(name + " says Woof!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog1 = new Dog(); // Tạo đối tượng dog1
        dog1.name = "Buddy";  // Khởi tạo thuộc tính
        dog1.age = 3;         // Khởi tạo thuộc tính
        dog1.bark();          // Gọi phương thức
    }
}

2. Thuộc tính và phương thức

  • Thuộc tính (Attributes): Là các biến được định nghĩa trong lớp. Chúng mô tả các đặc điểm của đối tượng.
  • Phương thức (Methods): Là các hàm được định nghĩa trong lớp. Chúng định nghĩa hành vi của đối tượng.

Tạo đối tượng trong Java

Để tạo một đối tượng trong Java, bạn sử dụng từ khóa new theo sau là tên lớp và một cặp dấu ngoặc đơn. Nếu lớp có constructor có tham số, bạn có thể truyền giá trị cho nó.

1. Constructor

Constructor là phương thức đặc biệt được gọi khi một đối tượng được tạo ra. Nó có tên giống với tên lớp và không có kiểu trả về.

class Car {
    String model;
    int year;

    // Constructor
    Car(String model, int year) {
        this.model = model;
        this.year = year;
    }

    void displayInfo() {
        System.out.println("Model: " + model + ", Year: " + year);
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car("Toyota", 2020); // Tạo đối tượng car1
        car1.displayInfo(); // In ra: Model: Toyota, Year: 2020
    }
}

2. Khởi tạo thuộc tính

Khi tạo đối tượng, bạn có thể khởi tạo các thuộc tính của nó bằng cách gán giá trị cho các thuộc tính đó.

class Student {
    String name;
    int age;

    void displayInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name = "Alice"; // Khởi tạo thuộc tính
        student1.age = 20;       // Khởi tạo thuộc tính
        student1.displayInfo();  // In ra: Name: Alice, Age: 20
    }
}

Đặc điểm của đối tượng

1. Tính riêng tư (Encapsulation)

Một trong những đặc điểm quan trọng của đối tượng là tính riêng tư. Điều này có nghĩa là các thuộc tính của đối tượng thường được đặt là private và chỉ có thể truy cập thông qua các phương thức công khai (public methods). Điều này giúp bảo vệ dữ liệu và duy trì tính nhất quán trong trạng thái của đối tượng.

class BankAccount {
    private double balance; // Thuộc tính private

    public void deposit(double amount) { // Phương thức công khai
        if (amount > 0) {
            balance += amount;
        }
    }

    public double getBalance() { // Phương thức công khai
        return balance;
    }
}

2. Tính kế thừa (Inheritance)

Đối tượng có thể kế thừa thuộc tính và phương thức từ các lớp khác. Điều này cho phép bạn tạo ra các lớp con mở rộng các chức năng của lớp cha mà không cần phải viết lại mã.

class Animal {
    void eat() {
        System.out.println("Eating...");
    }
}

class Dog extends Animal { // Lớp Dog kế thừa từ lớp Animal
    void bark() {
        System.out.println("Woof!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
        dog1.eat(); // In ra: Eating...
        dog1.bark(); // In ra: Woof!
    }
}

3. Tính đa hình (Polymorphism)

Đối tượng trong Java hỗ trợ tính đa hình, cho phép một phương thức có thể thực hiện nhiều hành động khác nhau tùy thuộc vào ngữ cảnh. Có hai loại đa hình: đa hình tĩnh (method overloading) và đa hình động (method overriding).

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

class Cat extends Animal {
    void sound() {
        System.out.println("Meow");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("Woof");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal; // Khai báo biến động
        myAnimal = new Cat(); // Đối tượng Cat
        myAnimal.sound(); // In ra: Meow

        myAnimal = new Dog(); // Đối tượng Dog
        myAnimal.sound(); // In ra: Woof
    }
}

Kết luận

Đối tượng là một khái niệm cốt lõi trong Java và lập trình hướng đối tượng. Chúng cho phép bạn mô phỏng các thực thể trong thế giới thực và tạo ra mã có cấu trúc và dễ quản lý. Bằng cách hiểu rõ về đối tượng, các thuộc tính, phương thức, và các đặc điểm như tính riêng tư, kế thừa, và đa hình, bạn có thể phát triển các ứng dụng phức tạp và mạnh mẽ hơn. Việc nắm vững khái niệm đối tượng sẽ là nền tảng vững chắc cho bất kỳ ai muốn trở thành lập trình viên Java giỏi.