Phân biệt extends và implements trong java

Phân biệt extends và implements trong java là một trong những câu hỏi trong phỏng ván thường xuyên gặp.Extends và implements là hai từ khóa được sử dụng rất nhiều trong java.Tuy nhiên một số lập trình viên mới học chưa năm được sự khác biệt thì ở bài viết này sẽ cụ thể hóa vấn đề này.

extends :  kế thừa các class
implements :
 kế thừa các interface

 

Mặc dù cả hai extends  implements trong Java được sử dụng để thực hiện kế thừa nhưng có những sự khác biệt giữa chúng.Extends được sử dụng để kế thứ từ một class khác trong khi đó  implements cũng được sử dụng để kế từ các interface.

Cách sử dụng extends ? 

Ví dụ chúng ta có các class A,B.Class A có một phương thức để hiển thị là show().Class B gồm hai phương thức display() và show() nhưng Class B kếthừa từ class A.Sau đó chúng ta sẽ tạo ra đối tượng dựa vào class B rồi gọi phương thức show,kết quả trả về sẽ là “better show” chứ không phải là “show”.Lý do vì class B đã extends từ class A thì nếu có hai phương thức của lớp cha trùng tên thì sẽ ghì đè lên phương thức trùng tên của lớp con.

Dưới đây là một ví dụ của extends trong Java:

class A {
  public void show() {
    System.out.println("show");
  }
}

class B extends A {
  public void display() {
    System.out.println("display");
  }

  public void show() {
    System.out.println("better show");
  }
}

public class Main {

  public static void main(String[] args) {

    A a = new B(); // possible because B extends A
    a.show(); // this will now call to show() method of class B
  }
}

Output
better show

Bạn cũng có thể đọc các tài liệu  Head First Design Pattern in Java  để tìm hiểu thêm về kỹ thuật lập trình.

Cách sử dụng implements ?

Ở ví dụ dưới chúng ta có một class R và implements từ interface Runnable thì bắt buộc rằng class R phải orver @Override tất cả các phương thức trừu tượng của interface Runnable.Ở đây là method run().

class R implements Runnable{
public void run(){
   System.out.println("do nothing");
  }
}

 

Điểm khác biệt quan trọng :

Dưới đây là một số điểm quan trọng của  extends và implements trong java :

1)Một class có thể kế thừa từ một class khác,không thể extends  từ một interface.

interface I{

}

class A{
}

class B extends A{

}

class C extends I{

}

Khi bạn chương trình chạy và biên dịch thì sẽ xuất hiện lỗi sau:

$ javac Main.java
Main.java:27: no interface expected here
class C extends I{
^
1 error

2) Khi sử dụng extends,một class chỉ có thể kế thừa từ một class khác,dưới đây là code thông báo lỗi khi cố gắng extends từ nhiều class:

class C extends A, B{

}

$ javac Main.java
Main.java:27: '{' expected
class C extends A, B{
^
1 error

3) Một interface có thể extends từ một interface khác.

interface J extends I{

}

5)Một class có thể kế thừa từ nhiều interface khác bằng cách sử dụng implements,đoạn code dưới đây thể hiện :

class D implements I, J, K{

}

6)Strong một lớp có thể sử dụng extends và implements.

class E extends A implements I, J{

}

7)Một interface không thể implements  từ một interface,nó không thể xảy ra cho nên lúc này khi chạy chương trình,nó sẽ xảy ra ngoại lệ :

interface L implements J{

}

javac Main.java
Main.java:49: '{' expected
interface L implements J{
^
1 error

Đó là tất cả về sự khác biệt giữa extends implements  trong Java.Bài viết nói lên những sự khác biết là kinh nghiệm trong lập trình của tôi có được,hy vọng bạn đọc comment ở dưới bài viết nếu có góp ý thêm về sự khác biệt nhé.

 

x