Implement Là Gì – Phân Biệt Extends Và Implements Trong Java | Bostonenglish.edu.vn

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.

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.

implement trong java là gì

implement trong java là gì

Bạn đang xem: Implement là gì

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

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 :

See also  Wish List Là Gì | Bostonenglish.edu.vn

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

Bạn đang xem bài viết tại: https://bostonenglish.edu.vn/

Tại sao sử dụng tính kế thừa trong Java?

  • Để ghi đè phương thức (Method Overriding), do đó có thể thu được tính đa hình tại runtime.
  • Để làm tăng tính tái sử dụng của code.

Cú pháp của Tính kế thừa trong Java

class ten_lop_con extends ten_lop_cha  
{  
   //cac phuong thuc va cac truong  
}  

Từ khóa extends chỉ rằng bạn đang tạo một lớp mới mà kế thừa từ một lớp đang tồn tại. Trong Java, một lớp mà được kế thừa được gọi là một lớp cha. Lớp mới được gọi là lớp con.

Trong ví dụ sau, Programmer là lớp con và Employee là lớp cha. Mối quan hệ giữa hai lớp là Programmer IS-A Employee. Nghĩa là Programmer là một kiểu của Employee.

class Employee{  
 float salary=40000;  
}  
class Programmer extends Employee{  
 int bonus=10000;  
 public static void main(String args[]){  
   Programmer p=new Programmer();  
   System.out.println("Luong Lap trinh vien la:"+p.salary);  
   System.out.println("Bonus cua Lap trinh vien la:"+p.bonus);  
}  
}

Ở trên, đối tượng Programmer có thể truy cập trường của riêng lớp nó cũng như của lớp Employee, đó là ví dụ cho tính tái sử dụng.

See also  Học phí Đại học Bách khoa Hà Nội - Học phí trường ĐH Bách khoa HN | Bostonenglish.edu.vn

Bạn đang xem bài viết tại: https://bostonenglish.edu.vn/

Các loại kế thừa trong Java

Trên cơ sở các lớp thì có 3 loại kế thừa trong Java, đó là single (đơn), multilevel (nhiều tầng) và hierarchical (có cấu trúc). Trong lập trình Java, đa kế thừa (multiple) và kế thừa lai (hybrid) chỉ được hỗ trợ thông qua Interface. Chúng ta sẽ tìm hiểu về Interface trong chương sau đó.

Ghi chú: Đa kế thừa không được hỗ trợ trong Java thông qua lớp. Khi một lớp kế thừa từ nhiều lớp, thì đây là đa kế thừa.

Câu hỏi: Tại sao đa kế thừa không được hỗ trợ trong Java thông qua lớp?

Trả lời: Để giảm tính phức tạp và làm đơn giản hóa ngôn ngữ, đa kế thừa không được hỗ trợ trong Java. Giả sử có tình huống có ba lớp là A, B và C. Lớp C kế thừa lớp A và B. Nếu các lớp A và B có cùng phương thức và bạn gọi nó từ đối tượng lớp con, thì điều này gây là tính lưỡng nghĩa là để gọi phương thức của lớp A hoặc lớp B.

Bởi vì, compile time error thì tốt hơn là runtime error, Java sẽ thông báo một compile time error nếu bạn kế thừa 2 lớp. Do đó, dù bạn có hay không có cùng phương thức hay khác phương thức, thì đó cũng là một lỗi tại compile time.

class A{  
void msg(){System.out.println("Hello");}  
}  
class B{  
void msg(){System.out.println("Welcome");}  
}  
class C extends A,B
{ //gia su neu no da co  

 Public Static void main(String args[]){  
   C obj=new C();  
   obj.msg();//Bay gio phuong thuc msg() nao se duoc goi?  
}  
}  

Chương trình trên sẽ cho một Compile Time Error.

Khi bạn đã hiểu rõ về từ khóa extends, chúng ta cùng tìm hiểu về từ khóa implements trong quan hệ IS-A.

Từ khóa implements được sử dụng bởi các lớp mà kế thừa từ Interface. Interface có thể không bao giờ được kết thừa bởi các lớp.

See also  Hàm DATEDIFF trong Power BI DAX

Ví dụ:

public interface A {}

public class B implements A{
}

public class C extends B{
}

Bạn đang xem bài viết tại: https://bostonenglish.edu.vn/

Từ khóa instanceof trong Java

Bây giờ chúng ta sẽ dùng toán tử instanceof để kiểm tra xem B có phải là một A và dog có phải là một A.

interface A{}

class B implements A{}

public class C extends B{
   public static void main(String args[]){

      B m = new B();
      C d = new C();

      System.out.println(m instanceof A);
      System.out.println(d instanceof B);
      System.out.println(d instanceof A);
   }
}

Kết quả in ra sẽ như sau:

true
true
true

Bạn đang xem bài viết tại: https://bostonenglish.edu.vn/

Quan hệ HAS-A trong Java

Có những quan hệ chủ yếu dựa vào cách sử dụng. Nó xác định có hay không một lớp cụ thể HAS-A. Quan hệ này giúp chúng ta giảm được dư thừa trong code cũng như tránh các bug.

Cùng xem ví dụ dưới đây:

public class Vehicle{}
public class Speed{}
public class Van extends Vehicle{
    private Speed sp;
} 

Điều này chỉ ra rằng lớp Van có quan hệ HAS-A với lớp Speed. Việc sử dụng lớp riêng rẽ cho lớp Speed, chúng ta không cần thiết phải đặt toàn bộ code của lớp Speed bên trong lớp Van, điều này tăng tính tái sử dụng của lớp Speed cho nhiều ứng dụng.

Một đặc điểm quan trọng nữa phải ghi nhớ là Java chỉ hỗ trợ kế thừa đơn. Điều này nghĩa là một lớp không thể kế thừa từ nhiều hơn một lớp. Do đó, đoạn code dưới đây là không hợp lệ:

public class C extends A, B{}

Mặc dù vậy một lớp vẫn có thể implement một hoặc nhiều interface. Điều này loại bỏ khả năng không thể đa kế thừa trong Java.

Chuyên mục: Hỏi Đáp

Bostonenglish.edu.vn cũng giúp giải đáp những vấn đề sau đây:

  • Interface là gì trong Java
  • Interface trong Java để làm gì
  • Implementation trong Java là gì
  • Triển khai interface trong Java
  • Implement là gì
  • Interface la gì
  • Các loại kế thừa trong Java
  • Giao diện interface trong Java
See more articles in the category: Wiki

Leave a Reply