Tại sao cần phải có cha java

Chào bạn, khi lập trình Java hướng đối tượng có một từ khóa rất thú vị đó là từ khóa super.

Tại sao cần phải có cha java

Từ khóa Super trong Java

Vậy từ khóa super trong Java có tác dụng gì? Sử dụng thế nào? bla... bla... Hãy cùng mình tìm hiểu trong bài viết này nhé.

Nội dung của bài viết này gồm:

  • Từ khóa super trong Java là gì?
  • Ví dụ cách sử dụng từ khóa super trong java
  • Khi nào nên sử dụng từ khóa super trong java

1. Từ khóa super trong java là gì?

Từ khóa super trong Java là một biến tham chiếu, được sử dụng để tham chiếu trực tiếp đến đối tượng của lớp cha gần nhất.

Bất cứ khi nào bạn tạo ra một thể hiện (hay còn gọi là một instance) của lớp con, một instance của lớp cha được tạo ra ngầm định, nghĩa là được tham chiếu bởi biến super.

Trước khi chúng ta đi vào các ví dụ và cách sử dụng super, bạn cần có kiến thức về kế thừa ở trong Java để hiểu được các ví dụ nhé.

> Bạn có thể tìm hiểu qua bài hướng dẫn Tự học Java này nhé

2. Cách sử dụng từ khóa super trong Java qua các ví dụ

Trong java, super có 3 cách sử dụng chính:

  • Sử dụng từ khóa super để tham chiếu trực tiếp đến biến instance của lớp cha gần nhất
  • Sử dụng từ khóa super để gọi đến phương thức của lớp cha gần nhất
  • Sử dụng super() để gọi trực tiếp constructor (hàm tạo) của lớp cha gần nhất

Sau đây chúng ta cùng tìm hiểu từng trường hợp qua ví dụ cụ thể nhé.

2.1. Ví dụ sử dụng từ khóa super để tham chiếu trực tiếp đến biến instance của lớp cha gần nhất

Sau đây mình sẽ tạo ra một lớp cha là Parent, sau đó tạo ra một lớp Child kế thừa (extends) lớp Parent như bên dưới đây:

Code:

class Parent {

public String name = "Biến lớp cha";

public String address = "Hà Nội";

public Parent() {} //Hàm tạo hay Constructor

}
 

// Tạo class con kế thừa class Parent

class Child extends Parent{

public String name = "Biến lớp con";

public Child() {} //Hàm tạo hay Constructor

public void display1() {

// Sử dụng từ khóa super

System.out.println("Sử dụng super gọi biến name: " + super.name);

// Không sử dụng từ khóa super

System.out.println("Không sử dụng super: " + name);

}

public void display2() {

System.out.println("Nơi ở: " + address);

}

}

public class SuperInJava {

public static void main(String[] args) {

Child child = new Child();

child.display1();

child.display2();

}

}
 

Khi chạy chương trình, chúng ta nhận được kết quả như sau:

Sử dụng super gọi biến name: Biến lớp cha
Không sử dụng super: Biến lớp con
Nơi ở: Hà Nội
 

Giải thích:

Ở đoạn code trên mình khai báo 2 class đó là class Parent (lớp cha) và class Child (lớp con). Class Child kế thừa class Parent.

Trong class child có hai phương thức là display1()display2() để in ra thông tin các thuộc tính của 2 class.

Với phương thức display1(), đầu tiên mình in ra màn hình sử dụng super.name vì vậy nó sẽ gọi đến biến name của lớp cha gần nhất (ở đây là lớp Parent).

Do đó nó sẽ in ra “Biến lớp cha”.

Tương tự mình in ra màn hình chỉ sử dụng name thì nó sẽ gọi đến biến name của lớp Child.

Với display2(), trường hợp này lớp Child không có biến address giống của lớp cha, vì vậy lớp Child sẽ kế thừa luôn biến address của lớp Parent.

Do đó mình in ra biến address mà không cần sử dụng super.address cũng được.

2.2. Ví dụ sử dụng từ khóa super để gọi phương thức của lớp cha gần nhất

Để hiểu cách gọi phương thức của lớp cha gần nhất bằng cách sử dụng từ khóa super thì hãy xem ví dụ bên dưới đây:

Code:

public Parent() {}

public void printInfo() {

System.out.println("Đây là lớp cha");

}

}

class Child extends Parent{

public Child() {}

public void printInfo() {

System.out.println("Đây là lớp con");

}

public void displayUseSuper() {

// Sử dụng từ khóa super

super.printInfo();

}

public void displayNotUseSuper() {

// Không sử dụng từ khóa super

printInfo();

}

}

public class SuperInJava {

public static void main(String[] args) {

Child child = new Child();

child.displayUseSuper();

child.displayNotUseSuper();

}

}
 

Khi chạy chương trình, chúng ta nhận được kết quả:

Đây là lớp cha
Đây là lớp con
 

 
Giải thích:

Ở đây ta thấy hai lớp ChildParent đều có phương thức printInfo (cùng có tên là printInfo giống nhau).

Trong lớp Child, phương thức displayUseSuper() sử dụng từ khóa super.printInfo(), vì vậy trình biên dịch sẽ hiểu là cần phải gọi đến hàm printInfo trong lớp Parent.

Tương tự phương thức displayNotUseSuper() không sử dụng từ khóa super nên nó trình biên dịch sẽ ưu tiên tìm đến phương thức được định nghĩa trong lớp con, nếu sẽ gọi.

Nếu không có, nó sẽ gọi đến phương thức trong lớp cha.

Vì thế, chúng ta có kết quả như trên.

2.3. Sử dụng super() để gọi trực tiếp constructor của lớp cha

Code:

public Parent() {

System.out.println("Hàm tạo lớp cha không tham số");

}

}

class Child extends Parent{

public Child() {

// Luôn đặt hàm super() đầu tiên

super();

System.out.println("Hàm tạo lớp con");

}

}

public class SuperInJava {

public static void main(String[] args) {

Child child = new Child();

}

}
 

Khi chạy chương trình trên, chúng ta nhận được kết quả:

Hàm tạo lớp cha không tham số
Hàm tạo lớp con
 

Giải thích:

Bạn thấy ở trong constructor của class Child, mình có gọi super(), . Phương thức super() là một phương thức đặc biệt của từ khóa super.

Việc sử dụng như trên trình biên dịch sẽ hiểu là bạn cần gọi đến contructor của lớp cha.

Lưu ý: Phương thức super() luôn phải đặt là câu lệnh đầu tiên.

Nhìn vào kết quả, mình tin là bạn sẽ hiểu ngay thôi.

Thông qua ba ví dụ về 3 trường hợp cụ thể trên, bây giờ chúng ta hãy cùng thực hành một ví dụ khác nhé. Cùng đoán xem đoạn code dưới đây sẽ chạy ra kết quả như thế nào?

int id;

String name;

Person (int idString name){

this.id = id;

this.name = name;

}

}

class Emp extends Person{

float salary;

Emp (int idString namefloat salary){

//gọi lại constructor có 2 tham số là id và name của class cha

super(id, name);

this.salary = salary;

}

void display(){

System.out.println(id + " " + name + " " + salary);

}

}

public class SuperInJava {

public static void main(String[] args) {

Emp e1 = new Emp(1"ankit"45000f);  

e1.display();

}

}
 

Bạn hãy thử chạy chương trình trong Eclipse IDE (hoặc IDE nào khác) để xem kết quả như thế nào nhé.

3. Khi nào nên sử dụng từ khóa super trong Java?

Qua phần kiến thức và ví dụ mình đã trình bày ở trên, chúng ta có thể rút ra được một số trường hợp nên sử dụng super như sau:

  • Sử dụng từ khóa super khi cần truy xuất đến thuộc tính của lớp cha gần nhất. Nó được sử dụng nếu lớp cha và lớp con có cùng tên thuộc tính.
  • Sử dụng từ khóa super khi cần truy xuất đến phương thức của lớp cha gần nhất. Nó nên được sử dụng nếu lớp con chứa cùng phương thức với lớp cha. Nói cách khác, nó được sử dụng nếu phương thức bị override (ghi đè).
  • Sử dụng từ khóa super khi cần gọi đến constructor của lớp cha gần nhất.

Bạn đã hiểu từ về khóa super trong Java chưa?

Như vậy thông qua bài viết này, mình đã trình bày cho các bạn các kiến thức về từ khóa super trong Java rồi.

Học Java cũng không quá khó phải không nào? Quan trọng là bạn biết chia nhỏ ra từng phần để học và kiên trì mỗi ngày là sẽ ổn thôi.

> Nếu muốn học có sự hướng dẫn của giảng viên doanh nghiệp. Bạn có thể tham gia KHÓA HỌC JAVA (full stack) để tăng tốc độ học tập và đi làm sớm hơn bạn nhé.

Hẹn gặp lại bạn trong bài viết tiếp theo.

---

HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI

Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!

Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội

SĐT: 02435574074 - 0383.180086

Email:

Website: https://niithanoi.edu.vn

Fanpage: https://facebook.com/NIIT.ICT/

#niit #niithanoi #icthanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python