Interface trong Java – Bạn đã hiểu đúng? Nếu chưa, mời đọc ngay – VNTALKING

Trong một lần vô tình vào VOZ forum, có một bạn hỏi về Interface trong Java là gì ? Nó khác với Abstract Class chỗ nào ? Tại sao phải dùng Interface, mặc dầu nó chẳng rút gọn code đi tý nào, thậm chí còn còn dài hơn. Mặc dù có nhiều bạn vấn đáp cho chủ topic đó nhưng hầu hết là hiểu sai, hoặc chưa hiểu rõ thực chất của Interface trong Java .
Để những bạn có cái nhìn thấu đáo, hiểu rõ thực chất của Interface. Từ đó hoàn toàn có thể ứng dụng Interface một cách chuẩn chỉ cho dự án Bất Động Sản của mình. Mình đã cho sinh ra bài viết này .

Tìm hiểu Interface trong Java

Java Interface là gì ? Có phải “ bộ mặt ” của Java ?

Để hiểu một cách chính xác thì phải đọc khái niệm Interface của chính chủ Oracle:

In its most common form, an interface is a group of related methods with empty bodies.Oracle

Đến Oracle cũng không hề định nghĩa Interface một cách khoa học kiểu : Interface là xyz, bla bla. Nhưng tất cả chúng ta hoàn toàn có thể hiểu một cách nôm na và đúng chuẩn như sau : Trong quốc tế thực, tất cả chúng ta có vật ( vật phẩm, con vật … ) và những hành vi của nó. Interface được sinh là để định nghĩa những hành vi của một nhóm vật .
Mình lấy ví dụ như sau : Một con mèo ( đây là con vật ) thì có những hành vi như : chạy, bắt chuột, ngủ …
Ta sẽ định nghĩa một Interface Cat như sau :

interface CatBehaviors {

    //  Cách con mèo chạy với tốc độ 
    void run(int speed);

   // Cách con mèo bắt chuột
    void catchMouse(int mouse);

    // Định nghĩa cách con mèo ngủ.
    void sleep();

}

Sau này tất cả chúng ta định nghĩa một con mèo thì tất yếu nó sẽ phải những hành vi của con mèo, dù nó là mèo tam thể hay mèo vàng …

class Cat implements CatBehaviors {
    private String màu_lông;
   //Cách con mèo chạy với tốc độ 
    void run(int speed){
     ...
    }
   //Cách con mèo bắt chuột
    void catchMouse(int mouse){
    ...
    }
    // Định nghĩa cách con mèo ngủ.
    void sleep(){
    ...
    }
}

Về học thuật thì Interface chính là khái niệm để hiện thực hóa triết lý đa hình trong lập trình hướng đối tượng người tiêu dùng. Cụ thể hơn thì mình sẽ lý giải ở phần sau của bài viết .
Interface Java cũng là một Abstract Class gồm có những method được định nghĩa ( nhưng nội dung của method thì không được viết đơn cử, người ta gọi là abstract method ). Một Class sau này sẽ implements một Interface, đến lúc đó class mới viết đơn cử nội dung của những method được định nghĩa trong interface .
Trong Interface, ngoài abstract method, bạn trọn vẹn hoàn toàn có thể thêm constants, static methods, nested interfaces ( interface trong một interface ) và default methods .

>> Đọc thêm: Học java ở đâu tốt nhất? Có cần phải đến trung tâm học lập trình?

Điểm giống – khác nhau giữa Interface và Abstract class :

Một interface về cơ bản trọn vẹn giống với abstract class. Một interface cũng có những abstract method và những method được phong cách thiết kế để implement ở những class khác. Việc implement này trọn vẹn giống với việc extend và override method trong Abstract class .

Về điểm khác nhau, thì mình thấy có 2 điểm chính:

  1. Về cách viết code: các method trong interface phải là empty method, tức là method không có nội dung, chỉ có tên hàm, tham số và kiểu dữ liệu trả về. Trong khi với abstract class thì bạn hoàn toàn có thể thêm abstract method hoặc method bình thường (là method có nội dung, logic bên trong body).
  2. Về mục đích sử dụng:
    • Interface là một chức năng mà bạn có thể thêm và bất kì class nào. Từ chức năng ở đây không đồng nghĩa với method (hay còn gọi là hàm).
    • Abstract class là một class cha cho tất cả các class có cùng bản chất. Bản chất ở đây được hiểu là kiểu, loại, nhiệm vụ của class.

Tại sao tất cả chúng ta cần Interface

Lý do chính là Java không tương hỗ đa thừa kế. Do đó, bạn không hề thừa kế cùng một lúc nhiều class. Các class con không hề thừa kế những thuộc tính của nhiều class cha, vì nó dẫn đến bài toán Kim Cương ( những bạn search Google để biết cái này nhé ) .
Để xử lý yếu tố này, người ta mới cho sinh ra Interface. Để hiểu rõ hơn, tất cả chúng ta sẽ cùng nhau xem ví dụ dưới đây .

Bạn muốn thiết kế một Sở thú, gồm rất nhiều các con vật. Về cơ bản thì các con vật đều có các đặc điểm chung như: Có tên, có tiếng kêu, có chân (2 chân, 4 chân, hoặc 0 có chân nào…). Từ những đặc điểm chung đó bạn tạo một abstract class là: abstract class Animal

Interface trong Java

Tuy nhiên lại có 1 số ít loài lại biết bay, một số ít loài thì biết bơi. Và cái “ dở ” là loài biết bay lại không biết bơi. Do vậy, ta không hề để đặc thù biết bay hay biết bơi trong class Animal được .
Đó là nguyên do tất cả chúng ta cần tạo 2 Interface khác nhau là Can_Fly và Can_Swim rồi xem class nào hoàn toàn có thể implements từng cái thích hợp .

interface java

Đặc điểm chính của Java Interface

Bạn đọc đến chắc cũng đã hiểu phần nào về Interface trong Java rồi đúng không ? Khi nào thì cần phải sử dụng Interface, và nó khác với Class thường chỗ nào .
Giờ mình sẽ tổng kết lại những đặc thù chính mà bạn cần phải nhớ về Interface :

  • Các method được khai báo trong Interface phải là method rỗng.
  • Không thể tạo đối tượng từ Interface.
  • Một Class có thể implement một hoặc nhiều Interface.

Mình viết một đoạn code mình họa cho đỡ nhàm chán nhé .

public interface extInterface {
        public void method1();
        public void method2();
}
import java.util.Scanner;
class Edureka implements extInterface{
    public void method1(){
         System.out.println("implementation of method1");
         Scanner scanner = new Scanner(System.in);
         System.out.println("Enter number to find square root in Java : ");
         double square = scanner.nextDouble();
         double squareRoot = Math.sqrt(square);
         System.out.printf("Square root of number: %f is : %f %n", square, squareRoot);
    }
    public void method2(){
               System.out.println("implementation of method2");
        }
public static void main(String arg[]){
               extInterface obj = new Edureka();
               obj.method1();
       }
}

Chạy đoạn code sẽ thu được hiệu quả :

implementation of method1
Enter number to find square root in Java :
16
Square root of number: 16.0 is : 4.0

Tổng kết

Như vậy là mình đã hoàn thành bài viết về Interface trong Java. Đọc đến đây, bạn đã “vỡ” ra được nhiều điều không? Nếu không thì… buồn ghê.

Các bạn nên nhớ, Interface chỉ là một công cụ, nó không phải là triết lý lập trình. Do vậy, khi ai đó nói tới lập trình hướng đối tượng người dùng, tới đa hình mà nói : Tính đa hình là interface. Thì không hẳn là đúng nhé. Nhớ này : Interface chỉ là một công cụ để triển khai tính đa hình .
Các bạn có tâm lý thế nào về Interface ? Hãy để lại phản hồi ở bên dưới nhé .