Chuyển đến nội dung chính

Extends Trong Java

Khi chúng ta nói về tính kế thừa, từ khóa thường xuyên nhất được sử dụng là extends trong java và implements trong java. Những từ khóa này có thể định nghĩa 1 kiểu là loại IS-A của loại khác. Sử dụng những từ khóa, chúng ta có thể tạo 1 đối tượng sử dụng thuộc tính của đối tượng khác.

Chúng ta sử dụng từ khóa extends của lớp con để có thể kế thừa những thuộc tính của lớp cha trừ những thuộc tính private của lớp cha. Bài viết này mình sẽ giới thiệu cho các bạn hiểu về tính kế thừa trong java. Qua đây hi vọng các bạn có thể tự viết được 1 class kế thừa từ class khác để giải quyết 1 bài toán.

I. Extends Trong Java Là Gì

Tính kế thừa trong Java là 1 kỹ thuật mà trong đó 1 đối tượng thu được tất cả thuộc tính và hành vi của đối tượng cha. Ý tưởng đằng sau tính kế thừa trong Java là bạn có thể tạo những lớp mới mà được xây dựng dựa trên những lớp đang tồn tại.

Khi các bạn kế thừa từ 1 lớp đang tồn tại, bạn có thể tái sử dụng những phương thức và những trường của lớp cha, và các bạn cũng có thể bổ sung thêm những phương thức và những trường khác. Tính kế thừa biểu diễn mối quan hệ IS-A, còn được gọi là mối quan hệ cha-con.

Như vậy, để hiểu 1 cách thực tế, giả sử đầu tiên chúng ta có 1 lớp nào đó, lớp này có thể là do chúng ta viết ra, hay “lượm lặt” ở đâu đó, mình tạm gọi tên lớp sẵn có này là A. Sau đó, để tận dụng lại những hàm hay những thuộc tính của A mà không cần phải viết lại (hoặc copy lại, có thể vi phạm bản quyền), thì chúng ta xây dựng 1 lớp mới kế thừa từ A, mình gọi lớp mới này là B.

Khi đó B của chúng ta sẽ có sẵn những phương thức và thuộc tính mà A có. Cũng có lúc không vì mục đích dùng lại những giá trị của A, mà là vì 1 vài giá trị của A không phù hợp với nhu cầu của B, thế là việc kế thừa từ A còn giúp cho B có cơ hội được hoàn thiện lại (hay còn gọi là mở rộng) những giá trị chưa phù hợp đó của A mà không làm thay đổi bản chất của A.

Vì 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.

II. Cách Sử Dụng Extends?

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

Sử dụng từ khóa extends để kế thừa.

class Subclass-name extends Superclass-name {  
   //methods and fields
}

Từ khóa extends có ý nghĩa rằng các bạn đang tạo 1 lớp mới và kế thừa từ 1 lớp đang tồn tại. Trong Java, 1 lớp mà được kế thừa được gọi là lớp cha, lớp kế thừa là lớp con.

Cách sử dụng Extends

Hãy cùng Techacademy xem qua 1 ví dụ sau:

Tạo 1 tập tin là: myClass.java

public class myClass {
        
        public myClass() {
            // Construct
        }
        
        int number = 200;
    }

Tiếp theo tạo file TwoClass.java

public class TwoClass extends myClass {
    public TwoClass() {
        // Constructor
    }
    public static void main(String[] args) {
        
        TwoClass obj = new TwoClass();
        System.out.println(obj.number);
    }
}

Ví dụ chúng ta có các class A,B.Class A có 1 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ó 2 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à 1 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

III. Ví Dụ Extends Trong Java

Có 3 kiểu kế thừa trong java là đơn kế thừa, kế thừa nhiều cấp, kế thừa thứ bậc.

Khi 1 class được kế thừa từ nhiều class đươc gọi là đa kế thừa. Trong java, đa kế thừa chỉ được support thông qua interface, như đã được nói đến trong bài interface trong java

Ví dụ về đơn kế thừa

File: TestInheritance1.java

class Animal {
    void eat() {
        System.out.println("eating...");
    }
}
 
class Dog extends Animal {
    void bark() {
        System.out.println("barking...");
    }
}
 
public class TestInheritance1 {
    public static void main(String args[]) {
        Dog d = new Dog();
        d.bark();
        d.eat();
    }
}

Output:

barking...
eating...

Ví dụ về kế thừa nhiều cấp

File: TestInheritance2.java

class Animal {
    void eat() {
        System.out.println("eating...");
    }
}
 
class Dog extends Animal {
    void bark() {
        System.out.println("barking...");
    }
}
 
class BabyDog extends Dog {
    void weep() {
        System.out.println("weeping...");
    }
}
 
public class TestInheritance2 {
    public static void main(String args[]) {
        BabyDog d = new BabyDog();
        d.weep();
        d.bark();
        d.eat();
    }
}

Kết quả là:

weeping...
barking...
eating...

Ví dụ về kế thừa thứ bậc

File: TestInheritance3.java

class Animal {
    void eat() {
        System.out.println("eating...");
    }
}
 
class Dog extends Animal {
    void bark() {
        System.out.println("barking...");
    }
}
 
class Cat extends Animal {
    void meow() {
        System.out.println("meowing...");
    }
}
 
public class TestInheritance3 {
    public static void main(String args[]) {
        Cat c = new Cat();
        c.meow();
        c.eat();
        // c.bark(); // compile error
    }
}

Kết quả là:

meowing...
eating...

III. 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à 2 từ khóa được sử dụng rất nhiều trong Java. Tuy nhiên 1 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ả 2 Extends và Implements trong Java được sử dụng để thực hiện kế thừa nhưng có các sự khác biệt giữa chúng. Extends được sử dụng để kế thứ từ 1 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

Cách sử dụng Implements ?

Ở ví dụ dưới chúng ta có 1 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à 1 số điểm khác biệt quan trọng của Extends và Implements trong Java :

1) Một class có thể kế thừa từ 1 class khác, không thể Extends từ 1 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, 1 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{

}

4) 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{

}

5) Strong một lớp có thể sử dụng Extends và Implements.

class E extends A implements I, J{

}

6) 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 và 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 Techacademy có được, hy vọng bạn đọc xem và áp dụng được ở thực tế.

Phân Biệt Extends Và Implements Trong Java
Phân Biệt Extends Và Implements Trong Java

The post Extends Trong Java first appeared on Techacademy.



Nhận xét

Bài đăng phổ biến từ blog này

Học Lập Trình Android Ở Đâu TpHCM, Hà Nội, Đà Nẵng ? Tốt Nhất, Uy Tín Nhất

Học lập trình Android là một trong những khóa học lập trình được nhiều bạn trẻ tìm kiếm nhất hiện nay bởi mực lương hấp dẫn và ổn định của một lập trình viên android. Đối với các bạn trẻ bắt đầu theo học android việc suy nghĩ học lập trình android ở đâu luôn là vấn đề được rất nhiều quan tâm. Để biết được câu trả lời khách quan nhất về học lập trình android ở đâu tại TpHCM, Hà Nội, Đà Nẵng? Mời bạn tham khảo ngay ý kiến từ Techacademy đưa ra dưới đây nhé! I. Học lập trình android ở đâu tốt nhất Hà Nôi, TpHCM, Đà Nẵng Dưới đây là danh sách các trung tâm đào tạo lập trình android hàng đầu Việt Nam hiện nay. 1, Techacademy Sử dụng phương pháp giảng dạy lập trình android được hiệu quả, giúp học viện hiểu bài và áp dụng thục hành ngay trong thực tế. Đây là phương pháp dạy lập trình android hiệu quả nhất hiện nay, giúp học viên xây dựng sự tự tin khi thực hành. Techacademy là trung tâm đào tạo lập trình android hàng đầu tại Việt Nam, được thành lập với đội ngũ giảng viên, chuyên gia lậ...

Phím Tắt Eclipse Thông Dụng Và Tiện Lợi Nhất ! Đọc Ngay Nếu Bạn Vẫn Đang Dùng Chuột

Việc sử dụng các thao tác click chuột nhiều lần trong Eclipse khiến các coder nhàm chán và tốn thời gian, hãy cải tạo nó bằng các phím tắt trong Eclipse. Dưới đây là danh sách một số những phím tắt thông dụng bạn nên biết. phím tắt eclipse (1) Đầu tiên hãy sử dụng phím tắt Ctrl + Shift + L để hiển thị danh sách các phím tắt trong Eclipse. phím tắt eclipse (2) Danh sách tất cả những phím tắt trong Eclipse bạn có thể áp dụng, được chia thành 12 mục khác nhau tùy thuộc vào tác dụng của phím tắt: 1. Quản lý tập tin và dự án Ctrl + N Tạo dự án mới bằng Wizard Ctrl + Alt + N Tạo dự án , tập tin, lớp, vv Alt + F Mở dự án, tệp, v.v. Ctrl + Shift + R Mở Resource (tệp, thư mục hoặc dự án) Alt + Enter Hiển thị và truy cập các thuộc tính tệp Ctrl + S Save tập tin hiện tại Ctrl + Shift + S Save tất cả các tập tin Ctrl + W Đóng tệp hiện tại Ctrl + Shift + W Đóng tất cả các tệp F5 Làm mới nội dung của phần tử đã chọn bằng hệ thống tệp cục bộ 2. Cửa sổ trình chỉnh sửa F1...

Hướng Dẫn Cài Đặt Python Trên Máy Tính?

Python là một ngôn ngữ lập trình phổ biến và được sử dụng rộng rãi trong lĩnh vực phát triển phần mềm và khoa học dữ liệu. Để bắt đầu sử dụng Python trên máy tính của bạn, bạn cần cài đặt nó. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách cài đặt Python trên máy tính một cách dễ dàng. I. Cài Đặt Python Trên Vscode Python là một ngôn ngữ lập trình phổ biến và VS Code là một trình soạn thảo mã nguồn được ưa chuộng. Kết hợp cả hai, bạn có thể tận dụng lợi ích của cả hai công cụ để phát triển ứng dụng Python một cách hiệu quả. Trong bài viết này, chúng tôi sẽ hướng dẫn cách cài đặt Python trên VS Code. Bước 1: Cài đặt VS Code Trước khi bắt đầu, bạn cần cài đặt VS Code trên máy tính của mình. Truy cập trang web vscode.com, tải xuống phiên bản phù hợp với hệ điều hành của bạn và làm theo hướng dẫn trên màn hình để hoàn tất quá trình cài đặt. Bước 2: Cài đặt Extension Python cho VS Code Sau khi cài đặt VS Code, bạn cần cài đặt extension Python để hỗ trợ phát triển ứng dụng Python t...