Tin tức và phân tích của tất cả các thiết bị di động

Lớp trừu tượng vs. Giao diện Java: giải thích kèm ví dụ

Các lớp và giao diện trừu tượng được sử dụng để trừu tượng hóa trong Java. Tính trừu tượng trong lập trình hướng đối tượng đề cập đến việc ẩn các chi tiết triển khai khỏi người dùng cuối.

Về mặt trừu tượng, bạn có thể biết các chức năng là gì, nhưng bạn không thể biết chúng được triển khai như thế nào.

Chúng ta hãy xem xét từng cái và cố gắng hiểu tại sao chúng được sử dụng.

Lớp trừu tượng

Một lớp không thể được khởi tạo dưới dạng đối tượng và có thể chứa hoặc không chứa các phương thức trừu tượng được gọi là lớp trừu tượng trong Java. Phương thức trừu tượng là phương thức không có nội dung triển khai khi được khai báo.

Một ví dụ về lớp GraphicObject trừu tượng – Oracle

Bạn có thể tạo một lớp trừu tượng bằng cách chỉ định từ khóa trừu tượng trước từ khóa lớp.

abstract class abstractClass {
    void run() {
        System.out.println("ran");
    }
}

Một lớp trừu tượng có thể được mở rộng với các lớp khác. Nói cách khác, nó cũng có thể được phân lớp.

abstract class AbstractClass {
    void run() {
        System.out.println("ran");
    }
}

class ExtendingAbstractClass extends AbstractClass {
    void newMethod() {
        System.out.println("new");
    }

    @Override
    void run() {
        System.out.println("override");
    }
}

Các lớp trừu tượng được sử dụng để triển khai các phương thức chung giữa nhiều lớp mở rộng một lớp trừu tượng nhất định. Ngoài ra, khả năng định nghĩa các phương thức trừu tượng trong các lớp trừu tượng khiến chúng cực kỳ hữu ích cho các lớp có các phương thức tương tự nhưng có cách triển khai khác nhau. Hãy lấy một ví dụ.

Hãy xem xét một chiếc ô tô có một số chức năng như khởi động, dừng, lùi, v.v. Những chức năng này phổ biến ở tất cả các loại ô tô.

Nhưng còn các tính năng tự động hóa như tự lái thì sao? Việc thực hiện các chức năng này có thể khác nhau đối với các loại ô tô khác nhau. Hãy xem cách bạn có thể tạo một chương trình hướng đối tượng liên quan đến vấn đề này.

Trước hết, hãy tạo một lớp ô tô sẽ được mở rộng với nhiều lớp thuộc các loại ô tô khác nhau.

abstract class Car {
    void start() {
        // implementation
        System.out.println("runs car");
    }

    void stop() {
        // implementation
        System.out.println("engine stops");
    }

    void reverse() {
        // implementation
        System.out.println("reverse mode enabled");
    }

    abstract void selfDrive();
}

Các phương thức start(), stop() và Reverse() thường được sử dụng trong tất cả các ô tô. Vì vậy, việc triển khai chúng đã được xác định trong chính lớp Xe hơi. Tuy nhiên, một loại ô tô cụ thể có thể có cách triển khai chế độ tự hành khác nhau. Bằng cách này, bạn có thể định nghĩa selfDrive() là một phương thức trừu tượng và triển khai nó theo nhiều cách khác nhau trong các lớp khác nhau của các loại ô tô khác nhau.

class CarTypeA extends Car {
    @Override
    void start() {
        super.start();
    }

    @Override
    void stop() {
        super.stop();
    }

    @Override
    void reverse() {
        super.reverse();
    }

    void selfDrive() {
        // custom implementation
        System.out.println("Type A self driving mode enabled");
    }
}
class CarTypeB extends Car {
    // ...all similar methods

    void selfDrive() {
        // custom implementation
        // different implementation than CarTypeB
        System.out.println("Type B self driving mode enabled");
    }
}

Lưu ý rằng nếu một lớp con không triển khai tất cả các phương thức trừu tượng được định nghĩa trong lớp trừu tượng thì nó phải được khai báo là lớp trừu tượng.

giao diện

Giao diện là một cách để báo cho lớp biết những phương thức nào nó cần triển khai. Ví dụ, nếu bạn lấy ví dụ về một chiếc ô tô, nó có một số tính năng cơ bản. Nó có thể bắt đầu, di chuyển và dừng lại. Những tính năng này là chung cho tất cả các xe ô tô.

Vì vậy, nếu bạn đang triển khai giao diện ô tô trong một lớp, bạn phải triển khai tất cả các phương thức để ô tô hoạt động bình thường và an toàn.

Giống như các lớp trừu tượng, chúng ta không thể khởi tạo hoặc tạo các đối tượng giao diện. Nó có thể được coi là một lớp hoàn toàn trừu tượng vì nó chỉ chứa các phương thức trừu tượng, nghĩa là các phương thức không có phần thân thực hiện.

Một giao diện có thể được tạo bằng từ khóa giao diện.

interface CAR {
    void start();
    void stop();
    void move();
}

Triển khai giao diện bằng cách sử dụng từ khóa cụ thể khi định nghĩa lớp.

class CarTypeB implements CAR {
    public void start() {
        System.out.println("started");
    }

    public void stop() {
        System.out.println("stopped");
    }

    public void move() {
        System.out.println("running");
    }
}

Sự tương đồng

Việc thiếu một thể hiện làm đối tượng là điểm chung duy nhất của các lớp và giao diện trừu tượng.

Sự khác biệt

Lớp trừu tượngKế thừa và triển khaiGiao diện lớp trừu tượngMột lớp chỉ có thể kế thừa một lớp trừu tượng.Một lớp có thể triển khai nhiều giao diện.Các loại biếnCó thể có các biến cuối cùng, không phải đầu cuối, tĩnh và không tĩnh.Chỉ có thể có các biến tĩnh và cuối cùng. Các kiểu phương thức Có thể chứa cả phương thức trừu tượng và không trừu tượng. Nó chỉ có thể chứa các phương thức trừu tượng, nhưng các phương thức tĩnh là một ngoại lệ. Công cụ sửa đổi truy cập Một lớp trừu tượng có thể có công cụ sửa đổi truy cập. Chữ ký phương thức được xác định trong giao diện theo mặc định là công khai. Giao diện không có công cụ sửa đổi truy cập. Hàm tạo và hàm hủy Có thể khai báo hàm tạo và hàm hủy. Nó không thể khai báo hàm tạo hoặc hàm hủy. Tốc độ Nhanh Chậm Sự khác biệt giữa lớp trừu tượng và giao diện

Khi nào nên sử dụng lớp trừu tượng và giao diện?

Sử dụng các lớp trừu tượng khi:

  • Bạn muốn hiển thị một số phương thức và trường phổ biến cho nhiều lớp.
  • Khai báo các trường không tĩnh và không kết thúc để sửa đổi trạng thái của đối tượng mà chúng được liên kết.

Bạn có thể sử dụng giao diện khi:

  • Bạn muốn xác định hành vi của một lớp thực hiện một giao diện, nhưng bạn không quan tâm đến cách nó được triển khai.
  • Bạn muốn đảm bảo rằng lớp triển khai tất cả các phương thức để chúng hoạt động chính xác.

những từ cuối

Các giao diện chủ yếu được sử dụng để tạo API vì chúng có thể cung cấp cấu trúc để triển khai chức năng mà không phải lo lắng về việc triển khai thực tế.

Các lớp trừu tượng thường được sử dụng để chia sẻ các phương thức trừu tượng và không trừu tượng chung giữa nhiều lớp mở rộng lớp trừu tượng nhằm làm cho mã trở nên hữu ích hơn.

Tìm hiểu thêm về Java với các khóa học Java trực tuyến này. Bạn đã sẵn sàng để nói về Java chưa? Dưới đây là một số câu hỏi phỏng vấn lập trình hướng đối tượng.