Rate this post

Trong Java, abstract và interface là hai khái niệm khác nhau nhưng cùng được sử dụng để tạo ra các đối tượng có chức năng tương tự.

  • Abstract là một từ khóa được sử dụng để khai báo một lớp trừu tượng. Một lớp trừu tượng không thể được khởi tạo và chỉ có thể được kế thừa. Nó có thể chứa các phương thức abstract hoặc không abstract.
  • Interface là một từ khóa được sử dụng để khai báo một giao diện. Một giao diện chỉ chứa các phương thức abstract và không chứa thực thể. Lớp có thể implement một hoặc nhiều giao diện.

Khác biệt giữa abstract và interface chính là abstract lớp có thể chứa các phương thức có thực thể và thuộc tính, trong khi giao diện chỉ chứa các phương thức abstract và không chứa thực thể. Abstract lớp có thể kế thừa từ một hoặc nhiều lớp, trong khi giao diện chỉ có thể được implement bởi một hoặc nhiều lớp.

Các bài viết liên quan:

Ví dụ về sử dụng abstract:

abstract class Shape {
    int x, y;
    abstract void draw();
}

class Rectangle extends Shape {
    void draw() {
        //code to draw a rectangle
    }
}

Ví dụ về sử dụng interface:

interface Shape {
    void draw();
}

class Rectangle implements Shape {
    void draw() {
        //code to draw a rectangle
    }
}

Từ đó ta có thể thấy interface và abstract là hai khái niệm khác nhau trong java, nhưng cùng được sử dụng để tạo ra các đối tượng có chức năng tương tự.

Abstract class trong Java

Trong Java, một abstract class là một lớp trừu tượng mà không thể tạo đối tượng trực tiếp. Abstract class bao gồm các phương thức trừu tượng (abstract method) và phương thức cụ thể (concrete method).

Để khai báo một abstract class trong Java, ta sử dụng từ khóa abstract trước từ khóa class như sau:

abstract class TenAbstractClass {
    // các phương thức abstract và concrete method
}

Abstract class được sử dụng khi ta muốn định nghĩa một lớp chung mà các lớp con của nó có thể kế thừa và triển khai các phương thức của nó. Các phương thức abstract trong abstract class cần phải được triển khai (override) trong các lớp con.

Một vài đặc điểm của Abstract class trong Java:

  • Không thể tạo đối tượng trực tiếp từ Abstract class.
  • Các phương thức abstract cần phải được triển khai trong các lớp con.
  • Các phương thức concrete method có thể được triển khai hoặc không trong các lớp con.

Dưới đây là một ví dụ về Abstract class trong Java:

abstract class Shape {
    public String color;
    
    public Shape(String color) {
        this.color = color;
    }
    
    // Phương thức abstract
    public abstract double getArea();
    
    // Phương thức concrete
    public String getColor() {
        return color;
    }
}

class Circle extends Shape {
    public double radius;
    
    public Circle(double radius, String color) {
        super(color);
        this.radius = radius;
    }
    
    // Triển khai phương thức abstract của lớp Shape
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

class Rectangle extends Shape {
    public double length;
    public double width;
    
    public Rectangle(double length, double width, String color) {
        super(color);
        this.length = length;
        this.width = width;
    }
    
    // Triển khai phương thức abstract của lớp Shape
    public double getArea() {
        return length * width;
    }
}

Trong ví dụ trên, lớp Shape là một abstract class. Lớp Circle và lớp Rectangle kế thừa từ lớp Shape và triển khai phương thức abstract getArea() của nó.

Interface trong Java

Trong Java, một interface là một tập hợp các phương thức trừu tượng (abstract) và hằng số (constants) mà các lớp khác có thể triển khai. Các phương thức trong interface không có thân phương thức (method body) và chỉ có khai báo phương thức. Một lớp có thể triển khai (implements) một hoặc nhiều interface và cung cấp thân phương thức cho các phương thức đó.

Để khai báo một interface trong Java, sử dụng từ khóa interface, sau đó liệt kê các phương thức và hằng số trong interface. Ví dụ:

public interface Animal {
   public void eat();
   public void sleep();
   public void makeSound();
}

Trong ví dụ trên, Animal là một interface, có ba phương thức trừu tượng (eat, sleep, và makeSound) mà các lớp triển khai Animal phải cung cấp thân phương thức cho chúng.

Một lớp có thể triển khai một hoặc nhiều interface bằng cách sử dụng từ khóa implements. Ví dụ:

public class Dog implements Animal {
   public void eat() {
      System.out.println("The dog is eating");
   }
   public void sleep() {
      System.out.println("The dog is sleeping");
   }
   public void makeSound() {
      System.out.println("The dog is barking");
   }
}

Trong ví dụ trên, Dog là một lớp triển khai interface Animal. Lớp Dog cung cấp thân phương thức cho ba phương thức trừu tượng trong interface Animal.

Xem thêm Pooling Layers trong thư viện Keras

Phân biệt Abstract và interface

Abstract và interface là hai khái niệm khác nhau trong Java mà được sử dụng để tạo ra các đối tượng có chức năng tương tự nhưng có một số khác biệt chính giữa hai khái niệm này.

  1. Khác nhau trong việc khai báo: Abstract là một từ khóa được sử dụng để khai báo một lớp trừu tượng, trong khi Interface là một từ khóa được sử dụng để khai báo một giao diện.
  2. Khác nhau trong việc kế thừa: Abstract class có thể kế thừa từ một hoặc nhiều lớp, trong khi Interface chỉ có thể được implement bởi một hoặc nhiều lớp.
  3. Khác nhau trong việc chứa phương thức: Abstract class có thể chứa các phương thức có thực thể và thuộc tính, trong khi Interface chỉ chứa các phương thức abstract và không chứa thực thể.
  4. Khác nhau trong việc sử dụng: Abstract class được sử dụng để khai báo một lớp trừu tượng và có thể kế thừa từ một hoặc nhiều lớp, trong khi Interface được sử dụng để khai báo một giao diện và chỉ có thể được implement bởi một hoặc nhiều lớp. Abstract class có thể chứa phương thức có thực thể và thuộc tính, trong khi Interface chỉ chứa các phương thức abstract và không chứa thực thể.
  5. Sử dụng abstract class khi ta muốn chia sẻ mã giữa các lớp con, còn Interface là khi ta muốn chỉ định các phương thức mà các lớp con phải thực hiện.
  6. Abstract class có thể có constructor, còn interface không có constructor.
  7. Với abstract class, các lớp con có thể override hoặc không override các phương thức của lớp cha, trong khi với interface, các lớp con phải override tất cả các phương thức của interface.

Xem thêm Tính trừu tượng (abstraction) trong java

Khi nào sử dụng Abstract class và interface trong Java

Trong Java, abstract class và interface đều được sử dụng để thiết kế các kiểu dữ liệu trừu tượng, nhưng có những điểm khác biệt về tính năng và cách sử dụng.

Abstract class thường được sử dụng để định nghĩa các lớp cơ sở, còn interface thường được sử dụng để định nghĩa các hành vi chung của các lớp.

Một số trường hợp nên sử dụng abstract class:

  • Khi bạn muốn định nghĩa các thành phần dữ liệu hoặc phương thức chung cho các lớp con, nhưng không thể cung cấp một triển khai hoàn chỉnh cho một số phương thức.
  • Khi bạn muốn cung cấp một triển khai mặc định cho một số phương thức.

Một số trường hợp nên sử dụng interface:

  • Khi bạn muốn định nghĩa các hành vi chung của các lớp.
  • Khi một lớp đã kế thừa một abstract class, nhưng vẫn cần triển khai thêm các hành vi của một interface khác.

Khi thiết kế một ứng dụng Java, việc sử dụng abstract class và interface đôi khi có thể được kết hợp để tạo ra một kiểu dữ liệu trừu tượng mạnh mẽ và dễ mở rộng.

Xem thêm Tấn công Mobile code non-final public field

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now