Ngày 1: Sử dụng kỹ thuật Polymorphism trong Java.
Polymorphism là một cơ chế OOP trong Java giúp một lớp có thể có nhiều dạng hay mặt (polymorphs). Một lớp có thể tham chiếu đến tại chỗ của nó hoặc bất kỳ lớp con nào của nó, cho phép phương thức gọi luôn luôn tham chiếu đến phương thức của thực thể chạy tại chỗ, dù có kế thừa hay không.
Ví dụ chi tiết:
“`java
// Lớp cơ sở Animal
public class Animal {
public void shout() {
System.out.println(“Animal is shouting”);
}
}
// Lớp Dog kế thừa từ Animal
public class Dog extends Animal {
@Override
public void shout() {
System.out.println(“Dog is barking”);
}
}
// Sử dụng Polymorphism
Animal myDog = new Dog();
myDog.shout(); // Đầu ra: Dog is barking
“`
Trong ví dụ trên, `myDog` tham chiếu đến một đối tượng của lớp `Dog `. Khi gọi `myDog.shout()`, phương thức `shout()` của lớp `Dog ` được gọi, dù `myDog` là một tham chiếu của lớp `Animal`. Điều này chứng minh rằng Java sử dụng Polymorphism để quyết định phương thức cụ thể để chạy tại thời điểm chạy, dựa trên thực thể của đối tượng.
Câu hỏi phỏng vấn:
1. Polymorphism trong Java hoạt động như thế nào?
2. Cách sử dụng Polymorphism trong trường hợp nào?
3. Có mấy loại Polymorphism trong Java và thế nào để sử dụng chúng?
4. Lợi ích của việc sử dụng Polymorphism là gì?
5. Hãy mô tả một trường hợp thực tế mà bạn đều sử dụng Polymorphism.
Câu trả lời:
1. Polymorphism trong Java cho phép một lớp tham chiếu đến tại chỗ của nó hoặc bất kỳ lớp con nào của nó, giúp phương thức gọi luôn luôn tham chiếu đến phương thức của thực thể chạy tại chỗ.
2. Bạn có thể sử dụng Polymorphism khi muốn một lớp cha có thể gọi phương thức của lớp con.
3. Có hai loại Polymorphism trong Java: compile-time (hoặc static) và runtime (hoặc dynamic). Compile-time Polymorphism được thực hiện thông qua overloading, trong khi runtime Polymorphism thông qua overriding.
4. Polymorphism tăng khả năng linh hoạt và tái sử dụng mã. Nó giúp để tránh sự rắc rối trong việc thay đổi mã nguồn khi thay đổi hành vi của đối tượng.
5. Trong một ứng dụng quản lý nhân viên, bạn có thể có các lớp khác nhau như “Manager”, “Engineer”, “Intern”, tất cả đều kế thừa từ lớp “Employee”. Bạn muốn mỗi loại nhân viên có phương thức “calculateSalary()” của riêng mình. Bạn có thể sử dụng Polymorphism để gọi phương thức “calculateSalary()” cụ thể cho từng loại nhân viên mà không cần biết đối tượng thuộc loại nhân viên nào.