JavaRush /Blog Java /Random-VI /10 lớp và giao diện trừu tượng Câu hỏi phỏng vấn Java

10 lớp và giao diện trừu tượng Câu hỏi phỏng vấn Java

Xuất bản trong nhóm
Các lớp và giao diện trừu tượng rất phổ biến trong tất cả các ngôn ngữ lập trình hướng đối tượng. Và trong hầu hết mọi cuộc phỏng vấn Java, bạn đều gặp ít nhất một câu hỏi về chủ đề này. Các giao diện được nhắc đến thường xuyên hơn do tính phổ biến của chúng đối với các nhà thiết kế phần mềm, nhưng các câu hỏi về các lớp trừu tượng đôi khi cũng được đặt ra. Loại thứ hai thường được hỏi nhất đối với những người ứng tuyển vào vị trí nhà phát triển cấp dưới, chẳng hạn như có không quá hai năm kinh nghiệm trong phát triển Java, trong khi các câu hỏi về giao diện thường gặp nhất trong các cuộc phỏng vấn với những người có kinh nghiệm đã vượt quá bốn năm. Chúng thường được hỏi cùng với các câu hỏi khác về các mẫu thiết kế Java, chẳng hạn như các mẫu Decorator hoặc Factory. 10 Lớp và Giao diện Trừu tượng Câu hỏi Phỏng vấn Java - 1Trong bài viết này, chúng ta sẽ xem xét các câu hỏi phổ biến về các lớp và giao diện trừu tượng đã được hỏi ở nhiều cấp độ phỏng vấn Java khác nhau. Hầu hết chúng không khó ngay cả đối với một lập trình viên Java mới vào nghề. Đây hầu hết là những câu hỏi về kiến ​​thức thuần túy, nhưng một số trong số đó, chẳng hạn như sự khác biệt giữa các lớp trừu tượng và giao diện trong Java hoặc khi nào nên chọn một lớp trừu tượng thay vì một giao diện , có thể khá phức tạp. Chúng tôi cung cấp cho bạn hàng tá câu hỏi thú vị về chủ đề này.
Nếu bạn đã từng được hỏi một câu hỏi trong một cuộc phỏng vấn hoặc phải hỏi bất kỳ câu hỏi đáng giá nào về các lớp và giao diện trừu tượng nhưng nó không có trong danh sách này, vui lòng chia sẻ nó trong phần bình luận.

1. Lớp trừu tượng có thể có hàm tạo trong Java không?

Có, trong một lớp trừu tượng trong Java, bạn có thể khai báo và định nghĩa các hàm tạo. Vì không thể tạo các thể hiện của các lớp trừu tượng, nên một hàm tạo như vậy chỉ có thể được gọi khi hình thành một chuỗi các hàm tạo, nghĩa là khi tạo một thể hiện của một lớp triển khai cụ thể. Nhưng hãy tưởng tượng rằng người phỏng vấn sau đó đặt câu hỏi: mục đích của hàm tạo là gì nếu bạn không thể tạo một thể hiện của một lớp trừu tượng? Vấn đề là nó vẫn có thể được sử dụng để đặt giá trị ban đầu của các biến chung được khai báo trong một lớp trừu tượng và được sử dụng bởi nhiều cách triển khai khác nhau. Ngay cả khi bạn không khai báo bất kỳ hàm tạo nào, trình biên dịch sẽ thêm một hàm tạo không có đối số mặc định vào lớp trừu tượng. Nếu không có nó, lớp con của bạn sẽ không biên dịch được vì câu lệnh đầu tiên trong bất kỳ hàm tạo nào là lệnh gọi ngầm super()đến hàm tạo của siêu lớp mặc định trong Java.

2. Lớp trừu tượng trong Java có thể triển khai giao diện không? Họ có phải thực hiện tất cả các phương pháp không?

Có, các lớp trừu tượng có thể triển khai giao diện bằng cách sử dụng implements. Vì chúng trừu tượng nên chúng không bắt buộc phải triển khai tất cả các phương thức. Việc có một lớp cơ sở trừu tượng và một giao diện để khai báo kiểu là một điều nên làm. Một ví dụ là một giao diện java.util.Listvà lớp trừu tượng tương ứng java.util.AbstractList. Bởi vì AbstractListnó triển khai tất cả các phương thức phổ biến, nên các triển khai cụ thể (chẳng hạn như LinkedListArrayList) không nhất thiết phải triển khai tất cả các phương thức, như trường hợp chúng triển khai Listtrực tiếp giao diện. Giải pháp này kết hợp lợi ích của việc sử dụng giao diện để khai báo một loại với tính linh hoạt của một lớp trừu tượng nhằm triển khai tất cả hành vi chung ở một nơi. Trong cuốn sách “Java. Lập trình hiệu quả” có một chương tuyệt vời về chủ đề sử dụng các giao diện và các lớp trừu tượng trong Java, để hiểu rõ hơn, bạn nên nghiên cứu nó.

3. Lớp trừu tượng có thể là lớp cuối cùng được không?

Không, anh ấy không thể. Từ khóa finalcó nghĩa là lớp nằm ở đầu hệ thống phân cấp và không thể có lớp con. Và một lớp trừu tượng không có người thừa kế là một con ngựa hình cầu trong chân không, vì không thể tạo ra một cá thể abstract class. Vì vậy, nếu một lớp vừa là abstractfinal, thì nó không có lớp con và không thể được khởi tạo. Trình biên dịch Java sẽ báo lỗi nếu bạn tạo một lớp abstractfinal.

4. Lớp trừu tượng trong Java có thể có phương thức tĩnh không?

Có, các lớp trừu tượng có thể khai báo và định nghĩa các phương thức tĩnh. Chỉ cần tuân theo các nguyên tắc chung của việc tạo các phương thức tĩnh trong Java, vì chúng không được mong muốn trong thiết kế hướng đối tượng, vì không thể ghi đè các phương thức tĩnh trong Java. Các phương thức tĩnh trong một lớp trừu tượng rất hiếm, nhưng nếu có lý do chính đáng cho điều đó thì không có gì ngăn cản bạn sử dụng chúng.

5. Có thể khởi tạo một lớp trừu tượng không?

Không, bạn không thể làm điều này. Bản chất của một lớp trừu tượng là nó chưa hoàn chỉnh và nó cần được hoàn thành trong các lớp con của nó. Tức là lớp này chưa sẵn sàng để sử dụng. Ví dụ, nó có thể thiếu việc triển khai một số phương pháp. Vì một lớp chưa sẵn sàng để sử dụng nên không thể tạo đối tượng của nó. Nhưng bạn có thể tạo các thể hiện của người kế thừa của một lớp trừu tượng. Trình biên dịch Java sẽ báo lỗi nếu một chương trình cố gắng khởi tạo một lớp trừu tượng.

6. Một lớp trừu tượng có nhất thiết phải có các phương thức trừu tượng không?

Không, một lớp trừu tượng có thể không có bất kỳ phương thức trừu tượng nào. Bạn có thể tạo một bản tóm tắt lớp trong Java chỉ bằng cách sử dụng từ khóa abstracttrong phần khai báo của nó. Trình biên dịch sẽ thực thi mọi hạn chế về cấu trúc, chẳng hạn như không cho phép tạo phiên bản của lớp này. Nhân tiện, câu hỏi liệu có nên có các phương thức trừu tượng trong một lớp hoặc giao diện trừu tượng hay không đang gây tranh cãi. Đối với tôi, có vẻ như một lớp trừu tượng nên có các phương thức trừu tượng, vì đây là điều đầu tiên mà một lập trình viên nghĩ đến khi nhìn thấy một lớp trừu tượng. Điều này rất phù hợp với nguyên tắc giảm thiểu những bất ngờ.

7. Sự khác biệt giữa lớp trừu tượng và giao diện trong Java là gì?

Đây là câu hỏi quan trọng nhất và là một trong những câu hỏi phỏng vấn Java cổ điển nhất. Tôi không thể đếm được bao nhiêu lần tôi đã nhìn thấy câu hỏi này trong các cuộc phỏng vấn Java ở mọi cấp độ. Đặc biệt, điều làm cho câu hỏi này trở nên thú vị là cơ hội để người nộp đơn đưa ra một ví dụ. Trả lời các câu hỏi về những điều cơ bản của lập trình hướng đối tượng, chẳng hạn như tính trừu tượng, tính đóng gói, tính đa hình và tính kế thừa, rất dễ dàng, nhưng khi đề cập đến những sắc thái tinh tế như vậy, người xin việc thường bối rối và nói điều đầu tiên xuất hiện trong đầu. Tuy nhiên, câu trả lời cho câu hỏi này xứng đáng có một bài viết riêng (đặc biệt là sau những thay đổi trong Java 8), tóm lại:
  • Một giao diện chỉ mô tả hành vi (phương thức) của một đối tượng, nhưng nó không có trạng thái (trường) (ngoại trừ public static final), trong khi một lớp trừu tượng có thể có chúng.

  • Một lớp trừu tượng được kế thừa (mở rộng) và một giao diện được triển khai (triển khai). Chúng ta chỉ có thể kế thừa một lớp nhưng triển khai bao nhiêu giao diện tùy thích. Một giao diện có thể mở rộng (mở rộng) một giao diện/giao diện khác.

  • Các lớp trừu tượng được sử dụng khi có mối quan hệ "is-a", nghĩa là lớp con mở rộng lớp trừu tượng cơ sở và các giao diện có thể được triển khai bởi các lớp khác nhau hoàn toàn không liên quan đến nhau.

8. Khi nào nên thích một lớp trừu tượng hơn một giao diện và ngược lại?

Đây là phần tiếp theo của các câu hỏi trước đây về các lớp và giao diện trừu tượng. Nếu bạn biết sự khác biệt về cú pháp của chúng là gì thì việc trả lời câu hỏi này sẽ không gây rắc rối cho bạn vì chúng là yếu tố quyết định việc đưa ra quyết định. Vì hầu như không thể thêm một phương thức mới vào giao diện đã xuất bản, nên tốt hơn nên sử dụng một lớp trừu tượng trong trường hợp có nhu cầu phát triển thêm. Phát triển các lớp trừu tượng trong Java dễ hơn phát triển giao diện. Tương tự như vậy, nếu một giao diện có quá nhiều phương thức và việc triển khai tất cả chúng trở thành một vấn đề thực sự đau đầu, thì tốt hơn là tạo một lớp trừu tượng để triển khai mặc định. Mẫu này được tuân theo trong gói bộ sưu tập Java, lớp trừu tượng AbstractListcung cấp cách triển khai mặc định cho List. Sử dụng các lớp trừu tượng nếu:
  • Bạn muốn chia sẻ mã giữa một số lớp có liên quan chặt chẽ.

  • Bạn mong muốn các lớp mở rộng lớp trừu tượng của mình có nhiều phương thức hoặc trường chung hoặc yêu cầu các công cụ sửa đổi truy cập khác ngoài public(ví dụ: protectedprivate).

  • Bạn muốn khai báo không tĩnh hoặc не-finalcác trường. Điều này cho phép bạn xác định các phương thức có thể truy cập và thay đổi trạng thái của đối tượng mà chúng thuộc về.
Sử dụng giao diện nếu:
  • Bạn mong đợi các lớp không liên quan sẽ triển khai giao diện của bạn. Ví dụ, các giao diện Comparableđược Cloneablethực hiện bởi nhiều lớp không liên quan.

  • Bạn muốn xác định hành vi của một kiểu dữ liệu cụ thể nhưng bạn không quan tâm ai thực hiện nó.

  • Bạn muốn sử dụng kế thừa nhiều kiểu.

9. Phương thức trừu tượng trong Java là gì?

Một phương thức trừu tượng là một phương thức không có phần thân. Bạn chỉ cần khai báo một phương thức mà không cần định nghĩa nó, sử dụng từ khóa abstracttrong phần khai báo phương thức. Theo mặc định, tất cả các phương thức được khai báo bên trong một giao diện bằng ngôn ngữ Java đều trừu tượng. Đây là một ví dụ về một phương thức trừu tượng trong Java:
public void abstract printVersion();
Bây giờ, để triển khai phương thức này, bạn cần mở rộng lớp trừu tượng và ghi đè phương thức này.

10. Một lớp trừu tượng trong Java có thể chứa một phương thức không main?

Có, một lớp trừu tượng trong Java có thể chứa một phương thức mainvì nó chỉ là một phương thức tĩnh khác và một lớp trừu tượng có thể được thực thi bằng phương thức đó main, miễn là bạn không khởi tạo nó. Đó là tất cả những gì tôi muốn nói với bạn. Và hãy nhớ: các lớp và giao diện trừu tượng là những quyết định thiết kế quan trọng trong quá trình phân tích và thiết kế hướng đối tượng và tất nhiên phải được sử dụng một cách thận trọng nếu bạn muốn tạo ra một hệ thống linh hoạt.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION