Ví dụ sử dụng từ khóa Super trong JAVA

0
2146
Ví dụ từ khóa Super trong Java

Từ khóa super trong Java là một biến tham chiếu ngay lập tức đến đối tượng class cha.

Từ khóa Super trong Java
Từ khóa Super trong Java

Các trường hợp sử dụng từ khóa super:

  • super có thể được sử dụng để tham chiếu biến thể hiện của lớp cha ngay lập tức.
  • super có thể được sử dụng để gọi phương thức lớp cha ngay lập tức
  • super() có thể được sử dụng để gọi hàm tạo của lớp cha ngay lập tức

Để hiểu cụ thể từ khóa super trong Java làm việc như thế nào, chúng ta cùng đi qua các ví dụ bên dưới đây:

1. Ví dụ sử dụng từ khóa super để tham chiếu ngay lập tức đến biến thể hiện của lớp cha.

Chúng ta có thể sử dụng từ khóa super để truy cập data member hoặc field của lớp cha. Nó được sử dụng nếu lớp cha và lớp con có cùng các trường.

Ví dụ:

class Animal{  
  String color = "Trắng";  
}

class Dog extends Animal{  
  String color = "Đen";  
  void printColor(){  
    System.out.println(color); //In màu của lớp Dog
    System.out.println(super.color); // In màu của lớp Animal  
  }  
}

class TestSuper1{  
  public static void main(String args[]){  
    Dog d = new Dog();  
    d.printColor();  
  }
}  

Kết quả:

Đen
Trắng

Trong ví dụ trên, cả hai lớp Animal và Dog đều có chung thuộc tính color.

Nếu chúng ta in thuộc tính color, nó sẽ in màu của lớp hiện tại theo mặc định.

Để truy cập thuộc tính cha mẹ, chúng ta cần sử dụng từ khóa super như ví dụ trên: super.color

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

Từ khóa super cũng có thể được sử dụng để gọi phương thức của lớp cha. 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ị ghi đè.

class Animal{  
  void eat(){
    System.out.println("Đang ăn...");
  }  
} 

class Dog extends Animal{  
  void eat(){
    System.out.println("Đang ăn cơm...");
  }  
  void bark(){
    System.out.println("Gâu gâu...");
  }
  void work(){  
    super.eat();  
    bark();  
  }  
}

class TestSuper2{  
  public static void main(String args[]){  
    Dog d = new Dog();  
    d.work();  
  }
}  

Kết quả:

Đang ăn...
Gâu gâu...

Trong ví dụ trên, cả hai lớp Animal và Dog đều có phương thức eat().

Nếu chúng ta gọi phương thức eat() từ lớp Dog, nó sẽ gọi phương thức eat() của lớp Dog theo mặc định vì nó ưu tiên cục bộ.

Để gọi phương thức eat() của lớp cha (lớp Animal), chúng ta cần sử dụng từ khóa super.

3. Ví dụ sử dụng từ khóa super để gọi hàm tạo của lớp cha

Từ khóa super cũng có thể được sử dụng để gọi hàm tạo (constructor) của lớp cha.

Hãy thử làm một ví dụ đơn giản:

class Animal{  
  Animal(){
    System.out.println("Animal được tạo");
  }  
}

class Dog extends Animal{  
  Dog(){  
    super();  
    System.out.println("Dog được tạo");  
 }  
}

class TestSuper3{  
  public static void main(String args[]){  
    Dog d = new Dog();
  }
}

Kết quả:

Animal được tạo
Dog được tạo

Lưu ý: super() được thêm vào trong class constructor tự động bởi trình biên dịch nếu không có super() hoặc this().

Trình biên dịch tự động thêm hàm tạo và câu lệnh super
Trình biên dịch tự động thêm hàm tạo và câu lệnh super

Như chúng ta biết rõ rằng hàm tạo mặc định được trình biên dịch cung cấp tự động nếu không có hàm tạo.

Nhưng, nó cũng thêm super() là câu lệnh đầu tiên.

Một ví dụ khác về từ khóa super, trong đó super() được cung cấp ngầm bởi trình biên dịch.

class Animal{  
  Animal(){
    System.out.println("Animal được tạo");
  }  
}

class Dog extends Animal{  
  Dog(){  
    System.out.println("Dog được tạo");  
  }  
}

class TestSuper4{  
  public static void main(String args[]){  
    Dog d = new Dog();  
  }
}

Kết quả:

Animal được tạo
Dog được tạo

Ví dụ thực tế sử dụng từ khóa super trong lập trình Java

Hãy xem công dụng thực sự của từ khóa super qua một ví dụ thực tế.

Ở đây, lớp Emp kế thừa lớp Person nên tất cả các thuộc tính của Person sẽ được kế thừa vào Emp theo mặc định.

Để khởi tạo tất cả các thuộc tính, chúng ta đang sử dụng hàm tạo của lớp cha từ lớp con. Theo cách đó, chúng ta đang sử dụng lại hàm tạo của lớp cha.

class Person{  
  int id;  
  String name;  
  Person(int id, String name){  
    this.id = id;  
    this.name = name;  
  }  
}

class Emp extends Person{  
  float salary;
  Emp(int id, String name, float salary){  
    super(id, name); // Sử dụng lại constructor của lớp cha 
    this.salary = salary;  
  }
  void display(){
    System.out.println(id+" "+name+" "+salary);}  
  }  
class TestSuper5{  
  public static void main(String[] args){  
    Emp e1 = new Emp(1, "Doanh", 85000000f);  
    e1.display();
  }
}  

Kết quả:

1 Doanh 8500000

Chúc mừng bạn đã hiểu hơn về từ khóa super trong Java

Từ khóa super trong Java là một cách để nhanh chóng tham chiếu đến lớp cha từ lớp con.

Tham khảo:

Nó có thể tham chiếu đến các biến, phương thức, hàm tạo trong lớp cha để sử dụng lại chúng trong lớp con nhằm tối ưu hóa code.

JavaDEV