Từ khóa siêu được sử dụng trong các tình huống khác nhau. Trước khi bắt đầu với bài đăng này, chúng tôi khuyến khích bạn tìm hiểu về tính kế thừa trong Java để hiểu rõ hơn.
Siêu từ khóa trong Java là gì?
Super là một từ khóa có thể được sử dụng để gọi các phương thức bị ghi đè của lớp cha, cũng như để chỉ các trường ẩn của lớp cha.Tại sao và khi nào nên sử dụng siêu từ khóa?
Siêu từ khóa Java có ba cách sử dụng rõ ràng.- Truy cập các thành viên dữ liệu của lớp cha khi lớp con cũng có các thành viên dữ liệu trùng tên.
- Gọi các hàm tạo mặc định hoặc được tham số hóa của lớp cha trong lớp con.
- Gọi các phương thức của lớp cha trong lớp con nếu lớp con có các phương thức bị ghi đè.
Ví dụ 1 - Truy cập các thành viên dữ liệu của cha mẹ
Ví dụ 1 minh họa cách các thuộc tính hoặc thành viên dữ liệu của lớp Vehicle có thể được truy cập trong lớp con Car -type. Hãy chắc chắn rằng bạn chạy đoạn mã dưới đây để hiểu rõ.
class Vehicle {
String name = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
myCar.printParentName();
}
}
đầu ra
Tên xe của tôi: xe hơi
Tên xe của cha mẹ tôi: xe
Ví dụ 2 - Truy cập hàm tạo của lớp cha trong lớp con
Việc gọi super() một cách rõ ràng cho phép bạn truy cập cả hàm tạo mặc định hoặc được tham số hóa của lớp cha trong lớp con. Đây là một ví dụ về hàm tạo được tham số hóa. Hàm tạo của lớp cha tức là Shape được gọi (sử dụng super() ) trong lớp con tức là lớp Triangle để đặt các thuộc tính. Chạy chương trình dưới đây để kiểm tra đầu ra cho chính mình.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
đầu ra
Hàm tạo tham số Shape() được gọi!
Hàm tạo tham số Triangle() được gọi!
Tam giác Alpha
Màu vàng
Thử thách nhanh : Thiết kế lại chương trình trên bằng cách sử dụng hàm tạo mặc định để kiểm tra việc học của bạn. Ngoài ra, hãy xem cách super() khác với super(arg) .
Ví dụ 3 - Truy cập phương thức bị ghi đè của lớp cha trong lớp con
Ví dụ 3 cho thấy cách bạn có thể truy cập các phương thức của lớp cha mà lớp con cũng định nghĩa. Lớp cha Sound trong chương trình bên dưới định nghĩa một phương thức voice() . Lớp con Drum cũng có một phương thức có cùng tên tức là voice() . Nó có nghĩa là giọng nói của phương thức bị ghi đè bởi lớp con. Chạy chương trình bên dưới để tìm hiểu cách từ khóa super cần thiết để sử dụng các phương thức của lớp cha trong lớp con.
public class Sound {
public void voice() {
System.out.println("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
đầu ra
Hàm tạo tham số Shape() được gọi!
Hàm tạo tham số Triangle() được gọi!
Tam giác Alpha
Màu vàng
GO TO FULL VERSION