Khi chúng ta nói về tính kế thừa trong Java, không thể không đề cập đến từ khóa extends và implements. Đây là những từ khóa quan trọng trong lập trình Java, cho phép chúng ta tạo ra sự kế thừa giữa các loại đối tượng. Với từ khóa này, chúng ta có thể tạo ra một đối tượng sử dụng các thuộc tính của đối tượng khác.
Contents
I. Extends Trong Java Là Gì?
Tính kế thừa trong Java là một kỹ thuật cho phép một đối tượng lấy được tất cả các thuộc tính và hành vi từ đối tượng cha. Ý tưởng đằng sau tính kế thừa trong Java là bạn có thể tạo ra các lớp mới dựa trên các lớp hiện có.
Bạn đang xem: Extends Trong Java
Khi bạn kế thừa từ một lớp hiện có, bạn có thể tái sử dụng các phương thức và trường của lớp cha, và bạn cũng có thể bổ sung thêm các phương thức và 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.
Để hiểu một cách cụ thể, giả sử chúng ta có một lớp A. Để tận dụng lại những hàm hoặc thuộc tính của lớp A mà không cần phải viết lại, chúng ta có thể xây dựng một lớp mới kế thừa từ lớp A, gọi là lớp B. Lúc này, lớp B sẽ có sẵn các phương thức và thuộc tính của lớp A.
Vì sao sử dụng tính kế thừa trong Java?
Tính kế thừa trong Java mang lại một số lợi ích như sau:
- Cho phép ghi đè phương thức (Method Overriding), từ đó tạo ra tính đa hình tại runtime.
- Tăng tính tái sử dụng của code.
READ MORE:
II. Cách Sử Dụng Extends
Xem thêm : Hướng dẫn từng bước lập trình web với Python
Cú pháp của kế thừa trong Java:
class Subclass-name extends Superclass-name {
//methods and fields
}
Từ khóa extends có ý nghĩa rằng chúng ta đang tạo một lớp mới và kế thừa từ một lớp hiện có. Trong Java, 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 xem qua một ví dụ sau:
// Tạo file myClass.java
public class myClass {
public myClass() {
// Khởi tạo
}
int number = 200;
}
// Tiếp theo, tạo file TwoClass.java
public class TwoClass extends myClass {
public TwoClass() {
// Khởi tạo
}
public static void main(String[] args) {
TwoClass obj = new TwoClass();
System.out.println(obj.number);
}
}
Ví dụ trên giúp chúng ta hiểu cách sử dụng từ khóa extends trong Java. Chúng ta có hai lớp A và B. Lớp A có một phương thức hiển thị là show(). Lớp B kế thừa từ lớp A và bổ sung thêm một phương thức display(). Khi tạo đối tượng từ lớp B và gọi phương thức show(), kết quả trả về sẽ là “better show” thay vì “show”. Lí do là vì lớp B đã kế thừa từ lớp A và ghi đè phương thức show() của lớp con.
Output: better show
III. Ví Dụ Về Extends Trong Java
Trong Java, có ba kiểu kế thừa chính là kế thừa đơn, kế thừa nhiều cấp và kế thừa thứ bậc. Hãy cùng xem các ví dụ dưới đây:
1. Ví dụ về kế thừa đơn
// 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...
2. 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();
}
}
Output:
weeping...
barking...
eating...
3. 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(); // Lỗi biên dịch
}
}
Output:
meowing...
eating...
IV. Phân Biệt Extends Và Implements Trong Java
Xem thêm : Initial nghĩa là gì: Định nghĩa, Ví dụ
Phân biệt Extends và Implements trong Java là một trong những câu hỏi được đặt thường xuyên trong phỏng vấn. Extends và Implements là hai từ khóa được sử dụng rất nhiều trong Java. Mặc dù cả hai từ khóa này đều liên quan đến việc thực hiện kế thừa, nhưng có những sự khác biệt quan trọng giữa chúng.
- Extends: được sử dụng để kế thừa từ một lớp khác.
- Implements: được sử dụng để kế thừa từ một interface.
Cách sử dụng Extends:
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();
a.show();
}
}
Output: better show
Cách sử dụng Implements:
class R implements Runnable {
public void run() {
System.out.println("do nothing");
}
}
Điểm khác biệt quan trọng giữa Extends và Implements trong Java:
- Một lớp chỉ có thể kế thừa từ một lớp khác, không thể kế thừa từ một interface.
- Một lớp chỉ có thể sử dụng từ khóa Extends một lần, không thể kế thừa từ nhiều lớp cùng lúc.
- Một interface có thể kế thừa từ một interface khác.
- Một lớp có thể kế thừa từ nhiều interface cùng lúc sử dụng từ khóa Implements.
- Một lớp có thể sử dụng cả từ khóa Extends và Implements.
- Một interface không thể Implements từ một interface khác.
Đó là tất cả về sự khác biệt giữa Extends và Implements trong Java. Hy vọng với những kiến thức này, bạn có thể áp dụng vào thực tế một cách hiệu quả.
Nguồn: https://ispacedanang.edu.vn
Danh mục: Học tập