Extends Trong Java – Techacademy

Khi tất cả chúng ta nói về tính thừa kế, từ khóa liên tục nhất được sử dụng là extends trong java và implements trong java. Những từ khóa này hoàn toàn 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, tất cả chúng ta hoàn toàn có thể tạo 1 đối tượng người tiêu dùng sử dụng thuộc tính của đối tượng người dùng khác .Chúng ta sử dụng từ khóa extends của lớp con để hoàn toàn có thể thừa kế 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ẽ ra mắt cho những bạn hiểu về tính thừa kế trong java. Qua đây hy vọng những bạn hoàn toàn có thể tự viết được 1 class kế thừa từ class khác để xử lý 1 bài toán .

I. Extends Trong Java Là Gì

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

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 tiễn, giả sử tiên phong tất cả chúng ta có 1 lớp nào đó, lớp này hoàn toàn có thể là do tất cả 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, hoàn toàn có thể vi phạm bản quyền ), thì tất cả chúng ta kiến thiết xây dựng 1 lớp mới thừa kế từ A, mình gọi lớp mới này là B .
Khi đó B của tất cả chúng ta sẽ có sẵn những phương pháp và thuộc tính mà A có. Cũng có lúc không vì mục tiêu dùng lại những giá trị của A, mà là vì 1 vài giá trị của A không tương thích với nhu yếu của B, thế là việc thừa kế từ A còn giúp cho B có thời cơ được hoàn thành xong lại ( hay còn gọi là lan rộng ra ) những giá trị chưa tương thích đó của A mà không làm biến hóa thực 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 để thừa kế .

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

Từ khóa extends có ý nghĩa rằng những bạn đang tạo 1 lớp mới và kế thừa từ 1 lớp đang sống sót. Trong Java, 1 lớp mà được thừa kế được gọi là lớp cha, lớp thừa kế 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ụ tất cả chúng ta có những class A, B.Class A có 1 phương pháp để hiển thị là show ( ). Class B gồm hai phương pháp display ( ) và show ( ) nhưng Class B kế thừa từ class A. Sau đó tất cả chúng ta sẽ tạo ra đối tượng người dùng dựa vào class B rồi gọi phương pháp show, hiệu 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 pháp của lớp cha trùng tên thì sẽ ghì đè lên phương pháp 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 thừa kế trong java là đơn thừa kế, thừa kế nhiều cấp, thừa kế thứ bậc .
Khi 1 class được thừa kế từ nhiều class đươc gọi là đa thừa kế. Trong java, đa thừa kế chỉ được tư vấn trải 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 liên tục 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ự độc lạ thì ở bài viết này sẽ cụ thể hóa yếu tố này .
Extends : thừa kế những class
Implements : thừa kế những interface
Mặc dù cả 2 Extends và Implements trong Java được sử dụng để thực thi thừa kế nhưng có những sự độc lạ 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ừ những Interface

Cách sử dụng Extends ?

Ví dụ tất cả chúng ta có những class A, B.Class A có một phương pháp để hiển thị là show ( ). Class B gồm hai phương pháp display ( ) và show ( ) nhưng Class B kế thừa từ class A. Sau đó tất cả chúng ta sẽ tạo ra đối tượng người dùng dựa vào class B rồi gọi phương pháp show, tác dụng 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 pháp của lớp cha trùng tên thì sẽ ghì đè lên phương pháp 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 tất cả 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ổng thể những phương pháp 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 độc lạ quan trọng của Extends và Implements trong Java :
1 ) Một class hoàn toàn có thể kế thừa từ 1 class khác, không hề 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ẽ Open 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ỉ hoàn toàn có thể kế thừa từ một class khác, dưới đây là code thông tin lỗi khi nỗ lực 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 hoàn toàn có thể Extends từ một Interface khác .

interface J extends I{

}

4 ) Một class hoàn toàn có thể thừa kế từ nhiều Interface khác bằng cách sử dụng Implements, đoạn code dưới đây biểu lộ :

class D implements I, J, K{

}

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

class E extends A implements I, J{

}

6 ) Một Interface không hề Implements từ một Interface, nó không hề xảy ra cho nên vì thế 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ổng thể về sự độc lạ 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 tay nghề trong lập trình của Techacademy có được, kỳ vọng bạn đọc xem và vận dụng được ở thực tiễn .
Phân Biệt Extends Và Implements Trong Java
Đánh Giá Chất Lượng Bài Viết

Average rating 0 / 5. Vote count : 0 No votes so far ! Be the first to rate this post.