Cập nhật nội dung chi tiết về Sự Khác Biệt Giữa Abstract Class Và Interface mới nhất trên website Cuocthitainang2010.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.
Cả Abstract class và Interface đều được sử dụng để đạt được sự trừu tượng nơi chúng ta có thể khai báo các phương thức trừu tượng. Cả Abstract class và Interface đều không thể được khởi tạo.
Nhìn chung, chúng khá giống nhau, nhưng có nhiều điểm khác biệt giữa Abstract class và Interface khiến nó được sử dụng ở những trường hợp khác nhau.
Sự khác biệt đơn giản, abstract class có thể đạt được trừu tượng một phần (0 đến 100%) trong khi interface đạt được mức trừu tượng hoàn toàn (100%).
Ghi chú: Nếu bạn đang tích cực học Java, KHÓA HỌC LẬP TRÌNH JAVA với sự hướng dẫn của chuyên gia doanh nghiệp này chắc chắn sẽ giúp bạn học tập nhanh hơn, bài bản hơn.
Ví dụ về Abstract class và Interface trong JAVA
Hãy xem một ví dụ đơn giản trong đó chúng ta đang sử dụng cả interface và lớp trừu tượng.
interface A{ void a(); void b(); void c(); void d(); } abstract class B implements A{ public void c(){ System.out.println("Tôi là C"); } } class M extends B{ public void a(){ System.out.println("Tôi là a"); } public void b(){ System.out.println("Tôi là b"); } public void d(){ System.out.println("Tôi là d"); } } class Test{ public static void main(String args[]){ A a = new M(); a.a(); a.b(); a.c(); a.d(); } }Kết quả:
Tôi là a Tôi là b Tôi là C Tôi là dTổng kết
Như vậy là trong và viết này mình đã giúp bạn tìm hiểu rõ sự khác nhau của Abstract class và Interface trong Java.
Sự Khác Biệt Giữa Một Interface Và Một Abstract Class
1
Lớp trừu tượng có thể có các phương thức abstract và non-abstract
Interface chỉ có thể có phương thức abstract
2
Lớp trừu tượng không hỗ trợ đa kế thừa
Interface hỗ trợ đa kế thừa
3
Lớp trừu tượng có thể có các biến final, non-final, static và non-static
Interface chỉ có các biến static và final
4
Lớp trừu tượng có thể có phương thức static, phương thức main và constructor
Interface không thể có phương thức static, main hoặc constructor.
5
Từ khóa abstract được sử dụng để khai báo lớp trừu tượng
Từ khóa interface được sử dụng để khai báo Interface
6
Lớp trừu tượng có thể cung cấp trình triển khai của Interface
Interface không cung cấp trình triển khai cụ thể của lớp abstract
Bỏ qua tất cả những phần về lý thuyết của việc tạo một abstract class và interface. Bạn không cần quan tâm nhiều đến việc abstract có thể khai báo những gì, hay interface có được phép định nghĩa nội dung phương thức hay không. Điểm cơ bản khi bạn được hỏi về sự khác biệt giữa chúng là gì? Đó chính là mục đích mà chúng được sử dụng:
– 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. Hai class cùng hiện thực một interface có thể hoàn toàn khác nhau về bản chất.
– 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 phương thức (hoặc hàm). Interface có thể bao gồm nhiều hàm/phương thức và tất cả chúng cùng phục vụ cho một chức năng.
Vậy, bạn không nên nhầm lẫn khi nói về việc một class được implement hay extend. Nhiều người thường hay đồng nhất là không phân biệt hai từ này, nhưng chính chúng đã nói lên sự khác biệt giữa interface và abstract class. Bạn chỉ có thể thừa kế (extend) từ một class và chỉ có thể hiện thực (implement) các chức năng (interface) cho class của mình.
Theo cách ngắn gọn, quan hệ giữa một class khi thừa kế một abstract class được gọi là is-a, và một class khi hiện thực một interface được gọi là can-do (hoặc -able).
Hãy xem ví dụ sau, tôi có:
– Interface: Barkable, Runable, Flyable, Swimable.
– Abstract class Animal và các sub class: Bolt, AngryBird và Nemo.
– Abstract class Machine và các sub class: McQueen, Siddeley.
Như bạn thấy, mặc dù cả McQueen và Bolt đều được hiện thực interface Runable, nhưng chúng hoàn toàn thuộc hai loại khác nhau. Và tất nhiên một class có thể can-do nhiều thứ, ví dụ như Bolt có thể chạy và “bow wow”.
Đây là một điều thường được dùng để trả lời cho hai câu hỏi:
– Interface được dùng để làm gì?
– Tại sao không thể định nghĩa phần thân cho các phương thức của interface.
Xét ở một mức độ nào đó điều này là hợp lý, nhưng như đã nói ở phần trên, nó chỉ được dùng để mô tả một “bản thiết kế” cho một chức năng của class. Nếu muốn tạo một bản thiết kế, hãy sử dụng abstract class. Một bản thiết kế tất nhiên sẽ có những thứ đã được dựng sẵn và có những thứ là abstract.
Một câu trả lời có thể lý giải phần nào câu hỏi thứ hai là việc cho phép định nghĩa thân phương thức trong các interface có thể khiến cho hiệu suất bị giảm sút. Nguyên nhân là việc tìm kiếm các phương thức sẽ diễn ra lâu hơn vì phải duyệt qua các interface, thay vì chỉ cần phải tìm trong class cha của nó.
Về công dụng của interface, xét ở mức ứng dụng, các interface có thể được hiểu như các plugin hoặc thư viện/phần mềm third-party. Việc hiện thực một interface cho class cũng giống như cài thêm plugin cho một phần mềm vậy.
Cuối cùng, cũng nên liệt kê các điểm khác biệt giữa hai khái niệm này để bạn có thể sử dụng được khi cần thiết. Các điểm khác biệt này có thể khác nhau tùy vào ngôn ngữ mà bạn sử dụng. Vì vậy bạn chỉ cần nhớ các điểm căn bản sau:
Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java?
Đây là một câu hỏi khá thú vị với vị trí junior java developer mà bất kì nhà tuyển dụng- NTD nào cũng đưa ra trong buổi phỏng vấn. Bài viết này, tôi sẽ giải thích chi tiết về sự khác nhau giữa hai khái niệm này.
Sự khác nhau giữa Abstract Class và Interface trong Java?
Abstract class và interface là một trong những phần core của ngôn ngữ lập trình Java và việc lựa chọn giữa asbtract class và interface trong thiết kế hệ thống là quyết đinh của một người – một team thiết kế hệ thống.
Và sự khác biệt giữa abstract class và interface được liệt kê như sau:
Abstract class có thể có nhiều method đã được implementation, trong khi interface chỉ define ra những abstract method (không thực hiện implementation).
Abstract class có thể có những contractor, trong khi interface không có bất kỳ một contractor nào.
Abstract class có tất cả tính năng của một java class bình thường, ngoại trừ việc instantiate nó. Interface chỉ được phép khai báo method và public static final constants.
Method của abstract class có thể sử dụng những access modifiers như private, protected, default, public, static nhưng method của interface chỉ sử dụng public và asbtract.
Một subclass chỉ có thể extend duy nhất một abstract class nhưng một class có thể implement nhiều interface.
Những abstract class có thể extend abstract class khác và implement nhiều interface, nhưng một interface chỉ có thể extend nhiều interface.
Có thể thực hiện run một abstract class nếu nó có một main() method, ngược với interface thì không.
Interfaces được sử dụng để define contract cho những class implement, abstract class cũng thực hiện define contract nhưng nó cung cấp một cách thức implementations có săn để subclass sử dụng.
Java không hỗ trợ “multiple class level inheritance”, do đó, mọi class chỉ có thể có một super class. Nhưng một class lại có thể implement nhiều interface. Do vậy, trong hầu hết các trường hợp, interface là một sự lựa chọn đúng đắn cho việc cung cấp base contract cho class hierarchy.
Nếu có nhiều method trong contract, thì bạn nên sử dụng abstract class vì nó cung cấp sẵn implementation cho một vài common method được áp dụng cho tất cả các subclasses.
Nếu contract của bạn thay đổi liên tục thì sử dụng interface có thể gặp những vấn đề bởi vì nó không thể thêm những method trong interface mà không thay đổi ở phía class thực hiện implement nó. Với abstract thì bạn không cần lo lắng điều này, do đó trong tình huống này thì sử dụng abstract là một giải pháp hiệu quả.
Cách sử dụng hiệu quả nhất?
Trong thực tế, việc sử dụng cả abstract class và interface là một phương pháp tiếp cận hiệu quả cho việc thiết kế hệ thống. Ví dụ như trong JDK, List là một interface có rất nhiều method, nhưng vẫn có song song một abstract class đó là AbstractList, nó cung cấp những skeletal implementation cho tất cả method của List interface, do đó, mọi subclass có thể extend class này và chỉ implement những method cần thiết.
Chúng ta nên luôn luôn bắt đầu bằng một interface như một base và define những method mà mọi subclasses nên thực hiện và sau đó nếu có một số method mà chỉ subclass nhất định phải implement, chúng ta có thể extend base interfacec này với các method mới đó. Các subclasses sẽ có tùy chọn để lựa chọn giữa base interface hoặc child interface để thực hiện những yêu cầu của nó. Nếu số lượng method phát triển nên nhiều, ý tưởng mới là sử dụng một abstract class để cung cấp ra bộ skeletal để imlement các child interface và cung cấp sự linh hoạt cho các subclass lựa chọn giữa abstract class hoặc interface.
Từ JDK 8 trở đi, bạn có thể có nhiều implement method trong nhiều interface. Tức là bạn có thể tạo ra mặc định như những static method trong những interface và cung cấp implementation cho chúng. Điều này sẽ thu hẹp khoảng cách giữa interface và abstract class, và bây giờ, interface là các thực hiện tốt nhất. Để biết thêm chi tiết về điểm thay đổi này trên JDK 8, bạn vui lòng đọc tài liệu JDK 8
Sự Khác Nhau Giữa Abstract Class Với Interface Trong Java.
Sự khác nhau giữa Abstract class với Interface trong Java
Abstract Class – Interface
Bạn vẫn nghe trong Java không hỗ trợ đa thừa kế (nhằm tránh sự phức tạp, xung đột code)
và để nhằm khắc phục vấn đề đó ta dùng interface (Cho phép nhiều class implements nhiều interface).
Vậy sự khác nhau giữa abstract class với interface là gì, cách dùng chúng trong mỗi trường hợp ra sao?
1. Ý nghĩa của abstract class và interface
abstract class:
Bạn nên nhớ Java là ngôn ngữ hướng đối tượng, dùng abstract class nó mang ý nghĩa là thừa kế bản chất của đối tượng. Ví dụ Student extends Personhoàn toàn hợp lý vì học sinh và người đều cùng bản chất, nhưng Student extends Car lại không hợp lý, vì học sinh và ô tô khác hoàn toàn nhau về bản chất.
interface:
Khi nói tới interface người ta thường dùng cho hành động nhiều hơn
Với abstract class thì người ta sẽ gộp chung các thuộc tính lại, còn với interface thì người ta sẽ gộp chung các hành động lại.
Túm lại:
Abstract class thiên về bản chất của đối tượng (các thuộc tính)
Interface thiên về các hành động của đối tượng (các method).
2. Sự khác nhau trong cài đặt abstract class và interface
Từ ý nghĩa mà abstract class với interface cũng có những khác nhau trong cài đặt:
Abstract class Interface
1 abstract class chỉ có thể extends 1 và chỉ một class /abstract class khác 1 interface có thể extends nhiều interface khác; interface chỉ có thể extends interface không thể extends class
Trong abstract class có thể có concrete method hoặc abstract method Trong interface, mọi method đều là abstract method
(*Từ Java 8 cho phép thêm method không phải là abstract vào interface bằng từ khóa default)
Trong abstract class khi muốn tạo abstract method bắt buộc phải có từ khóa abstract Từ khóa abstract có thể có hoặc không.
abstract method trong abstract class có thể là public hoặc protected abstract method trong abstract class chỉ có thể là public
(*Từ Java 9 cho phép thêm method private và private static vào Interface)
Trong abstract class, các thuộc tính có thể final, static, public, private, protected Trong Interface, mọi thuộc tính đều là public static final
Sự khác nhau giữa Abstract class với Interface trong Java.
References:
https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
Bạn đang đọc nội dung bài viết Sự Khác Biệt Giữa Abstract Class Và Interface trên website Cuocthitainang2010.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!