JavaRush /Blog Java /Random-VI /Câu hỏi và Trả lời: Có thể định nghĩa các phương thức trừ...

Câu hỏi và Trả lời: Có thể định nghĩa các phương thức trừu tượng trong lớp cuối cùng không?

Xuất bản trong nhóm
Câu hỏi thú vị và quan trọng này đã được đặt ra cho một trong những độc giả của tôi trong một cuộc phỏng vấn qua điện thoại cho vị trí nhà phát triển Java. Mặc dù anh ấy biết rằng không thể tạo ra một lớp trừu tượng finalbằng ngôn ngữ Java , nhưng anh ấy vẫn bối rối trước cách diễn đạt của câu hỏi. Câu trả lời rất đơn giản: không, finalkhông thể có các phương thức trừu tượng trong một lớp -. Tại sao? Bởi vì ngay khi bạn khai báo một phương thức trừu tượng trong lớp ngôn ngữ Java, lớp này sẽ tự động trở thành lớp trừu tượng và finalbạn không thể tạo một lớp trừu tượng trong ngôn ngữ Java. finalĐiều này có nghĩa là không thể có các phương thức trừu tượng trong lớp Java.
Câu hỏi và Trả lời: Có thể định nghĩa các phương thức trừu tượng trong lớp cuối cùng không?  - 1
Nhiều nhà phát triển Java bối rối khi trả lời câu hỏi này vì cách diễn đạt. Ngay cả khi người đặt câu hỏi quen thuộc với khái niệm chung, anh ta có thể không nhận ra rằng một lớp, sau khi khai báo một phương thức trừu tượng trong đó, sẽ trở nên trừu tượng và bạn không thể tạo một lớp trừu tượng finaltrong Java. Điểm này tách biệt câu hỏi này với câu hỏi phổ biến hơn và thường được hỏi: trong Java có thể khai báo một lớp là trừu tượng và cuối cùng cùng một lúc không? Hãy xem một mã ví dụ để chứng minh rằng finalkhông thể khai báo một phương thức trừu tượng trong một -class. Chúng ta hãy Hello.javapublic finalmột lớp tên là Hello, có một phương thức trừu tượng print().
public final class Hello {
  public abstract void print();
}
Gõ đoạn mã này vào IDE, bạn sẽ nhận được thông báo lỗi sau, họ nói Hellonó phải là một lớp trừu tượng thì các phương thức trừu tượng mới có thể được khai báo trong đó.
Câu hỏi và Trả lời: Có thể định nghĩa các phương thức trừu tượng trong lớp cuối cùng không?  - 2
Câu hỏi và Trả lời: Có thể định nghĩa các phương thức trừu tượng trong lớp cuối cùng không?  - 3
Điều tương tự sẽ xảy ra nếu bạn nhập mã này vào Notepad và biên dịch nó bằng tiện ích javac từ dòng lệnh. Theo đặc tả Java, ngay khi bạn khai báo một phương thức trừu tượng bên trong một lớp, lớp đó sẽ trở thành một lớp trừu tượng và vì bạn không thể tạo một lớp trừu tượng finaltrong Java nên trình biên dịch sẽ phát sinh lỗi. Điều này đúng cho cả các lớp cấp cao nhất và các lớp lồng nhau trong ngôn ngữ Java. Ngay cả khi bạn khai báo một phương thức trừu tượng trong một finallớp - lồng nhau, lỗi vẫn sẽ giống nhau. Một câu hỏi liên quan khác là: một lớp trừu tượng trong Java có thể có các phương thức tĩnh không? Trả lời: có, họ có thể, không có vấn đề gì khi khai báo một phương thức tĩnh trong một lớp trừu tượng, vì để sử dụng một phương thức tĩnh, bạn không cần tạo một thể hiện của lớp, chúng có thể được gọi đơn giản bằng cách sử dụng tên lớp. Chúng ta có thể sửa đổi ví dụ của mình để bao gồm Hellomột phương thức trong lớp main(), phương thức này là tĩnh trong Java, như hiển thị bên dưới:
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
Như bạn có thể thấy, không có lỗi biên dịch nào được đưa ra. Mã này biên dịch mà không gặp vấn đề gì, vì trong Java bạn hoàn toàn có thể khai báo một phương thức tĩnh trong một lớp trừu tượng một cách an toàn. Kết luận ngắn gọn Không thể khai báo một phương thức trừu tượng trong một finallớp -. Bởi vì một khi bạn làm điều này, lớp sẽ tự động trở nên trừu tượng, theo đặc tả Java. Và vì finalmột -class trong Java không thể trừu tượng nên điều này là không thể chấp nhận được và trình biên dịch sẽ cấm bạn thực hiện điều này bằng cách đưa ra một lỗi. Nhưng bạn có thể khai báo các phương thức tĩnh cả trong lớp cuối cùng và lớp trừu tượng, không có vấn đề gì với điều này.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION