Tổng hợp 500+ câu hỏi phỏng vấn Java
Tổng hợp những câu hỏi phỏng vấn Java mới nhất, chính xác nhất theo từng cấp bậc!
Câu hỏi phỏng vấn Java
Hãy xem các câu hỏi chúng tôi đã tổng hợp và cùng ôn luyện lại nhé!
Trong Java, Java là một ngôn ngữ lập trình và một nền tảng phát triển phần mềm. Nó được tạo ra bởi Sun Microsystems và sau đó được mua lại bởi Oracle Corporation.
Java được sử dụng rộng rãi vì các lý do sau:
-
Đơn giản và dễ học: Ngôn ngữ Java có cú pháp sáng sủa và dễ hiểu, việc học có thể diễn ra dễ dàng đối với những người mới bắt đầu.
-
Đa nền tảng: Java được thiết kế để có thể chạy trên nhiều nền tảng khác nhau, bao gồm máy tính để bàn, máy tính xách tay, di động và nhúng.
-
Quyền riêng tư và an toàn: Java có một mô hình bảo mật mạnh mẽ giúp ngăn chặn các lỗ hổng bảo mật và chống lại các cuộc tấn công từ phía hacker.
-
Thư viện phong phú: Java có một bộ thư viện chuẩn rất lớn, cung cấp hơn 4.500 lớp và giao diện để hỗ trợ các tác vụ phát triển thông qua các giao diện đồ họa, xử lý chuỗi, I/O và nhiều hơn nữa.
-
Hiệu năng cao: Mã Java được biên dịch thành mã byte trung gian (bytecode) và sau đó thực thi trên một máy ảo gọi là Java Virtual Machine (JVM). Máy ảo này giúp tối ưu hóa hiệu suất và cho phép tăng tốc độ thực thi chương trình.
-
Hỗ trợ cộng đồng mạnh mẽ: Java có một cộng đồng lập trình viên lớn và tích cực, cung cấp nhiều tài liệu, diễn đàn và nguồn tư liệu học tập.
Nhờ vào những lợi ích trên, Java đã trở thành một trong những ngôn ngữ lập trình phổ biến và được sử dụng rộng rãi trong việc phát triển ứng dụng web, ứng dụng di động, ứng dụng máy tính và các hệ thống nhúng.
Có một số sự khác biệt chính giữa Java và C++:
-
Tính động và tính bảo mật: Java là ngôn ngữ có sự kiểm soát bộ rác tự động và có mô hình bảo mật cao hơn so với C++. Trong Java, các đối tượng được quản lý bởi “garbage collector” để thu thập và giải phóng bộ nhớ không sử dụng, trong khi đó C++ cần phải quản lý chính xác các vùng nhớ bằng việc thực hiện thủ công các phép hủy đối tượng.
-
Quản lý bộ nhớ: Java sử dụng bộ nhớ heap để quản lý cấp phát và giải phóng bộ nhớ tự động, trong khi C++ sử dụng việc cấp phát và giải phóng bộ nhớ thủ công thông qua các phép new và delete.
-
Đa kế thừa: Java không hỗ trợ đa kế thừa trực tiếp, trong khi C++ cho phép đa kế thừa. Java sử dụng sự kế thừa interface để đạt được mục tiêu tương tự.
-
Exception handling: Cách xử lý ngoại lệ trong Java khác biệt so với C++. Trong Java, tất cả các ngoại lệ (exception) phải được xử lý (handled) bởi cú pháp try-catch, trong khi C++ không yêu cầu điều này.
-
Thư viện tiêu chuẩn: C++ có một số thư viện tiêu chuẩn rất phong phú như STL (Standard Template Library), trong khi Java sử dụng thư viện tiêu chuẩn Java (Java Standard Library) để cung cấp các công cụ và lớp cho các tác vụ phổ biến.
-
Hiệu suất: Trong một số tình huống, C++ có thể đạt được hiệu suất cao hơn so với Java, bởi vì Java phải chạy trên một máy ảo Java (JVM), trong khi C++ được biên dịch trực tiếp thành mã máy.
Tuy nhiên, Java và C++ cũng có nhiều điểm tương đồng, bao gồm cấu trúc ngôn ngữ và khả năng lập trình hướng đối tượng. Mỗi ngôn ngữ có ưu điểm và hạn chế riêng, và lựa chọn sử dụng phụ thuộc vào yêu cầu và mục đích của dự án.
Có một số điểm khác biệt giữa cú pháp của Java và cú pháp của C++:
-
Cú pháp khai báo biến: Trong Java, khai báo biến bắt đầu bằng kiểu dữ liệu, sau đó tên biến và có dấu chấm phẩy kết thúc. Ví dụ: int number; Trong C++, cú pháp khai báo biến tương tự, nhưng kết thúc bằng dấu chấm phẩy. Ví dụ: int number;
-
Cú pháp khai báo hằng số: Trong Java, hằng số được khai báo bằng từ khóa "final" trước kiểu dữ liệu và tên hằng số. Ví dụ: final int MAX_VALUE = 10; Trong C++, hằng số được khai báo bằng từ khóa "const" trước kiểu dữ liệu và tên hằng số. Ví dụ: const int MAX_VALUE = 10;
-
Inheritance (kế thừa): Trong Java, kế thừa được thực hiện bằng từ khóa "extends". Ví dụ: class ChildClass extends ParentClass {} Trong C++, kế thừa được thực hiện bằng dấu hai chấm đôi "::". Ví dụ: class ChildClass : public ParentClass {}
-
Quản lý bộ nhớ: Trong Java, quản lý bộ nhớ được tự động thực hiện bởi garbage collector. Trong C++, phải thủ công cấp phát và giải phóng bộ nhớ động bằng "new" và "delete" hoặc "new[]" và "delete[]".
-
Xử lý đa hình: Trong Java, đa hình được thực hiện thông qua phương thức ghi đè (overriding) và phương thức nạp chồng (overloading). Trong C++, cũng có thể sử dụng đa hình thông qua hàm và phương thức ảo (virtual).
Đây chỉ là những điểm khác biệt cơ bản giữa cú pháp của Java và C++. Các ngôn ngữ còn có rất nhiều điểm khác biệt khác nhau.
Trong Java, có các kiểu dữ liệu sau:
- Kiểu số nguyên (integer): bao gồm kiểu byte, short, int và long.
- Kiểu số thực (floating-point): bao gồm kiểu float và double.
- Kiểu ký tự (char): kiểu dữ liệu này được sử dụng để lưu trữ một ký tự duy nhất.
- Kiểu logic (boolean): kiểu dữ liệu này chỉ có hai giá trị là true và false.
- Kiểu dữ liệu chuỗi (String): trình bày dữ liệu dạng văn bản hoặc chuỗi ký tự.
- Kiểu dữ liệu mảng (array): cho phép lưu trữ nhiều giá trị cùng kiểu dữ liệu trong một biến.
- Kiểu dữ liệu lớp (class): kiểu dữ liệu này là một đối tượng của một lớp được xác định trước.
Không, trong Java, phương thức và hàm được sử dụng để thực hiện một đoạn mã hoạt động nào đó và được gọi từ một đối tượng hoặc một lớp. Tuy nhiên, một phương thức được định nghĩa trong một lớp, trong khi một hàm là một phần tử độc lập không thuộc về một lớp cụ thể nào.
e.printStackTrace()
và System.out.println()
đều là phương thức trong Java, nhưng chúng có mục đích và cách sử dụng khác nhau.
e.printStackTrace()
được sử dụng để in ra thông tin về một ngoại lệ (exception) được ném ra trong chương trình. Phương thức này sẽ in ra thông tin về ngoại lệ, bao gồm stack trace (dãy các phương thức đã được gọi trước khi ngoại lệ xảy ra), và thông tin chi tiết về ngoại lệ đó.
Trong khi đó, System.out.println()
được sử dụng để in ra thông tin thông thường trên màn hình console. Phương thức này có thể dùng để in ra các giá trị của biến, thông báo, hoặc bất kỳ thông tin nào cần hiển thị trên màn hình.
Vì vậy, sự khác biệt chính giữa hai phương thức này là e.printStackTrace()
được sử dụng để in ra thông tin về ngoại lệ, trong khi System.out.println()
được sử dụng để in ra thông tin thông thường.
Để tạo và chạy một chương trình Java đơn giản, bạn cần thực hiện các bước sau:
-
Mở trình chỉnh sửa văn bản (notepad, Notepad++, Eclipse, IntelliJ IDEA, và cách khác).
-
Tạo một tệp tin mới và lưu nó với phần mở rộng
.java
(ví dụ:MyProgram.java
). -
Mở tệp tin và nhập mã chương trình Java. Dưới đây là ví dụ một chương trình Java đơn giản in ra màn hình dòng chữ "Xin chào Thế giới!":
public class MyProgram {
public static void main(String[] args) {
System.out.println("Xin chào Thế giới!");
}
}
-
Lưu tệp tin.
-
Mở cửa sổ dòng lệnh hoặc Terminal.
-
Điều hướng đến thư mục chứa tệp tin
.java
của bạn. -
Biên dịch mã nguồn bằng cách chạy lệnh
javac MyProgram.java
. Quá trình biên dịch sẽ tạo ra tệp tin.class
. -
Chạy chương trình bằng lệnh
java MyProgram
. Lúc này, dòng chữ "Xin chào Thế giới!" sẽ được in ra màn hình.
Chú ý: Đảm bảo Java Development Kit (JDK) đã được cài đặt và được thiết lập đúng trên hệ thống của bạn để có thể biên dịch và chạy chương trình Java.
Cả hai Eclipse và IntelliJ IDEA đều là các công cụ phát triển tích hợp (IDE) phổ biến và mạnh mẽ dành cho việc phát triển ứng dụng Java. Việc sử dụng Eclipse hoặc IntelliJ IDEA để viết code Java phụ thuộc vào sở thích và sự thoải mái của từng người sử dụng. Cả hai đều cung cấp một loạt các tính năng hỗ trợ việc xây dựng và quản lý dự án Java, kiểm tra lỗi và debug code, và tích hợp với các công cụ phát triển và quản lý phiên bản khác. Điều này có nghĩa là bạn có thể chọn bất kỳ công cụ nào mà bạn cảm thấy thoải mái và hiệu quả khi sử dụng để viết code Java.
OOP (Object-Oriented Programming) là một phương pháp lập trình cho phép lập trình viên xây dựng các đối tượng và tương tác giữa các đối tượng trong chương trình. Java là một ngôn ngữ lập trình hướng đối tượng, nên OOP rất quan trọng trong Java. Dưới đây là một số khái niệm chính trong OOP trong Java:
-
Lớp (Class): Lớp là một mô tả hoặc bản thiết kế để tạo ra một đối tượng. Nó chứa các trường dữ liệu và phương thức để thao tác với dữ liệu đó. Lớp được coi như một kiểu dữ liệu mới.
-
Đối tượng (Object): Đối tượng là một thực thể của một lớp. Nó có tồn tại trong bộ nhớ máy tính và có thể sử dụng các phương thức và trường dữ liệu của lớp để thực hiện một số công việc cụ thể.
-
Kế thừa (Inheritance): Kế thừa là quá trình một lớp con (subclass) kế thừa các thuộc tính và phương thức từ một lớp cha (superclass). Điều này giúp tái sử dụng mã nguồn và tạo ra sự liên kết giữa các lớp.
-
Đa hình (Polymorphism): Đa hình cho phép một đối tượng có thể thể hiện nhiều hình dạng khác nhau. Điều này được thực hiện thông qua việc sử dụng các phương thức có cùng tên nhưng có thể thực hiện khác nhau tùy thuộc vào lớp con, sử dụng tính đa hình giúp mở rộng và tăng tính linh hoạt của mã nguồn.
-
Đóng gói (Encapsulation): Đóng gói là quá trình che giấu các chi tiết bên trong của lớp và cung cấp một giao diện công khai để tương tác với đối tượng. Điều này giúp bảo vệ dữ liệu và giúp duy trì tính toàn vẹn của mã nguồn.
-
Đa kế thừa (Multiple inheritance): Trong Java, lớp chỉ có thể kế thừa từ một lớp cha duy nhất. Tuy nhiên, một lớp có thể kế thừa từ nhiều giao diện (interface), cho phép nó có thể triển khai nhiều kiểu khác nhau.
-
Giao diện (Interface): Giao diện là một tập hợp các phương thức trừu tượng mà một lớp phải triển khai. Giao diện giúp định nghĩa một giao thức chung cho các lớp khác nhau và cho phép các lớp không có mối quan hệ họ hàng với nhau thực hiện cùng một giao diện.
Những khái niệm này là những khái niệm cơ bản trong OOP trong Java. Hiểu về chúng sẽ giúp lập trình viên thiết kế và xây dựng chương trình Java một cách hiệu quả hơn.
Hướng đối tượng (Object-oriented programming - OOP) và hướng thủ tục (Procedural programming) là hai phương pháp lập trình khác nhau trong Java.
Hướng đối tượng là một phương pháp lập trình tập trung vào đối tượng, mỗi đối tượng có các thuộc tính (properties) và phương thức (methods) riêng. Đối tượng được xem như một thực thể trong thế giới thực và tương tác với nhau thông qua gửi các thông điệp (message) và sử dụng các phương thức của đối tượng. Hướng đối tượng tập trung vào việc phân chia code thành các đối tượng riêng biệt, giúp tăng tính tái sử dụng, dễ hiểu và bảo trì code.
Hướng thủ tục là một phương pháp lập trình tập trung vào các thủ tục, chương trình được chia thành các hàm (functions), mỗi hàm thực hiện một công việc cụ thể. Hướng thủ tục tập trung vào việc phân chia code thành các hàm riêng biệt, giúp tăng tính tổ chức và dễ bảo trì code.
So sánh giữa hai phương pháp:
-
Cấu trúc: Trong hướng đối tượng, code được phân chia thành các đối tượng, mỗi đối tượng có thuộc tính và phương thức riêng. Trong hướng thủ tục, code được phân chia thành các hàm độc lập thực hiện các công việc cụ thể.
-
Đặc điểm: Hướng đối tượng tập trung vào đối tượng, tương tác giữa các đối tượng để xử lý logic. Hướng thủ tục tập trung vào thủ tục, các hàm được sử dụng lần lượt để thực hiện các công việc.
-
Tính tái sử dụng: Hướng đối tượng tăng tính tái sử dụng do các đối tượng có thể được sử dụng lại trong nhiều chương trình khác nhau. Hướng thủ tục không có tính tái sử dụng cao như vậy.
-
Nguyên tắc: Hướng đối tượng tuân theo các nguyên tắc như kế thừa, đa hình, đóng gói. Hướng thủ tục không có các nguyên tắc tương tự.
Việc chọn giữa hướng đối tượng và hướng thủ tục phụ thuộc vào yêu cầu và quy mô của dự án. Hướng đối tượng thích hợp cho các dự án lớn, phức tạp và yêu cầu tính tái sử dụng cao. Hướng thủ tục thích hợp cho các dự án đơn giản và có quy mô nhỏ.
Java là một ngôn ngữ lập trình hướng đối tượng và cũng là một nền tảng phát triển phần mềm. Java được phát triển bởi Sun Microsystems (hiện thuộc Oracle Corporation) và được ra mắt lần đầu vào năm 1995. Ngôn ngữ này được thiết kế để có thể chạy trên nhiều nền tảng khác nhau mà không cần thay đổi code nguồn. Java được sử dụng rộng rãi trong phát triển ứng dụng di động, ứng dụng web, ứng dụng máy tính và hệ thống phân tán.
Java được sử dụng phổ biến vì có nhiều ưu điểm sau:
-
Đa nền tảng (Platform independence): Java được thiết kế để chạy trên nhiều hệ điều hành khác nhau mà không cần phải viết lại mã nguồn. Điều này đảm bảo tính tương thích giữa các ứng dụng Java trên các hệ điều hành khác nhau.
-
Ngôn ngữ phổ biến: Java là một trong những ngôn ngữ lập trình phổ biến nhất hiện nay. Sự phổ biến này đồng nghĩa với việc có nhiều tài liệu, tài liệu tham khảo, cộng đồng phát triển lớn và nhiều công cụ hỗ trợ.
-
Bảo mật cao: Java được thiết kế với các tính năng bảo mật bên trong nền tảng. Mã nguồn Java được biên dịch thành bytecode không thể chạy trực tiếp trên máy tính, điều này giúp tránh được các phần mềm độc hại.
-
Tính đa luồng mạnh mẽ: Java hỗ trợ đa luồng (multithreading) cho phép các ứng dụng chạy nhiều tác vụ đồng thời. Điều này cho phép các ứng dụng Java đạt hiệu suất cao và tăng cường trải nghiệm người dùng.
-
Hỗ trợ phát triển phần mềm: Java cung cấp nhiều công cụ và thư viện mạnh mẽ để hỗ trợ phát triển phần mềm. Java Development Kit (JDK) cung cấp các công cụ phát triển như trình biên dịch, bộ gỡ lỗi và tạo mã nguồn tự động.
-
Mạnh mẽ và linh hoạt: Java có một cú pháp rõ ràng, hỗ trợ lập trình hướng đối tượng, cung cấp các tính năng mạnh mẽ như garbage collection, exception handling, generics và reflection. Tất cả những điều này làm cho việc phát triển ứng dụng dễ dàng và linh hoạt hơn.
Từ những ưu điểm trên, Java được sử dụng rộng rãi trong nhiều lĩnh vực như phát triển ứng dụng web, ứng dụng di động, phát triển game, hệ thống giao dịch tài chính và nhiều lĩnh vực công nghệ khác.
Trong Java, JVM, JRE và JDK là các thuật ngữ liên quan đến việc cài đặt và chạy ứng dụng Java trên máy tính. Dưới đây là sự khác biệt giữa chúng:
-
JVM (Java Virtual Machine): JVM là môi trường ảo cho phép chạy các ứng dụng Java trên hệ điều hành. JVM chịu trách nhiệm biên dịch các mã nguồn Java thành mã máy có thể thực thi được trên máy tính. Nó cung cấp môi trường để thực thi ứng dụng Java mà không phụ thuộc vào hệ điều hành cụ thể.
-
JRE (Java Runtime Environment): JRE chứa các thành phần cần thiết để chạy các ứng dụng Java đã được biên dịch. Nó bao gồm JVM, thư viện lõi của Java và các công cụ hỗ trợ thực thi. JRE được cài đặt trên máy tính để chạy các ứng dụng Java, nhưng không bao gồm các công cụ phát triển.
-
JDK (Java Development Kit): JDK là bộ công cụ phát triển Java, bao gồm JRE cùng các công cụ phát triển khác như trình biên dịch, gỡ lỗi và công cụ quản lý gói. JDK được sử dụng để phát triển và biên dịch các ứng dụng Java. Nó cung cấp môi trường để viết, biên dịch và chạy mã nguồn Java.
Tóm lại, JVM là môi trường ảo để chạy mã Java, JRE cung cấp môi trường để chạy các ứng dụng Java đã được biên dịch, trong khi JDK là bộ công cụ phát triển Java gồm JRE và các công cụ phát triển khác.
Một số đặc điểm quan trọng của ngôn ngữ lập trình Java trong Java gồm:
-
Độc lập nền tảng: Java được thiết kế để chạy trên mọi nền tảng mà không cần thay đổi code nguồn. Người dùng có thể viết một chương trình Java và chạy nó trên bất kỳ hệ điều hành nào (Windows, Mac, Linux, vv) mà không cần chỉnh sửa code.
-
Quản lý bộ nhớ tự động: Java có bộ điều khiển bộ nhớ tự động (garbage collector) để loại bỏ các đối tượng không sử dụng để giải phóng bộ nhớ. Điều này giúp giảm thiểu việc lập trình viên phải quản lý bộ nhớ thủ công, giúp giảm số lượng lỗi xảy ra do quản lý bộ nhớ.
-
Hỗ trợ đối tượng: Java là một ngôn ngữ lập trình hướng đối tượng, cho phép phân giải và sắp xếp code thành các đối tượng riêng biệt. Điều này giúp tăng tính cấu trúc và tái sử dụng code, giảm sự phức tạp và tăng tính mềm dẻo trong việc phát triển phần mềm.
-
Đa luồng: Java cho phép lập trình viên tạo và quản lý các luồng thực thi song song (multi-threading). Điều này giúp tăng hiệu năng và khả năng đáp ứng của ứng dụng.
-
Thư viện phong phú: Java đi kèm với một số lượng lớn thư viện chuẩn, cung cấp các công cụ và chức năng sẵn có cho việc phát triển các ứng dụng Java. Các thư viện này giúp giảm thiểu công việc lập trình viên và tăng tốc độ phát triển ứng dụng.
-
Bảo mật: Java có các tính năng bảo mật tích hợp sẵn, đi kèm với việc xác thực và kiểm tra quyền truy cập từng phần tử trong ứng dụng Java. Điều này giúp bảo vệ ứng dụng khỏi các tấn công từ bên ngoài và giới hạn quyền truy cập của các thành phần bên trong ứng dụng.
-
Tích hợp dễ dàng: Java hỗ trợ tích hợp dễ dàng với các công nghệ khác như cơ sở dữ liệu, mạng và web, làm cho việc phát triển ứng dụng đa nền tảng và phức tạp trở nên đơn giản hơn.
Tổng quan, những đặc điểm này làm cho Java trở thành một ngôn ngữ lập trình phổ biến và mạnh mẽ cho việc phát triển các ứng dụng đa nền tảng và phức tạp.
Phạm vi của biến được giới hạn bởi khối mã mà biến được khai báo. Có 4 loại phạm vi biến trong Java:
-
Phạm vi của biến cục bộ (local variables): Biến cục bộ chỉ có thể truy cập và sử dụng trong phạm vi của khối mã trong đó biến được khai báo. Khối mã có thể là một phương thức, một câu lệnh điều khiển như if hoặc for.
-
Phạm vi của biến đối tượng (instance variables): Biến đối tượng tồn tại trong một đối tượng cụ thể và có thể truy cập và sử dụng trong toàn bộ phạm vi của đối tượng đó. Chúng không thể truy cập từ một phương thức static hoặc một khối mã static.
-
Phạm vi của biến static (class variables): Biến static có thể truy cập và sử dụng trong toàn bộ phạm vi của lớp Java. Chúng tồn tại ngay cả khi không có đối tượng của lớp được tạo ra.
-
Phạm vi của biến tham số: Biến tham số chỉ có thể truy cập và sử dụng trong phạm vi của phương thức hoặc khối mã mà biến được truyền vào như một tham số.
Trong Java, ArrayList và LinkedList là hai lớp cài đặt List interface có các đặc điểm và cách hoạt động khác nhau như sau:
-
Cấu trúc dữ liệu: ArrayList được triển khai bằng một mảng dễ dàng truy cập theo chỉ số, trong khi LinkedList là một danh sách liên kết mà mỗi phần tử sẽ có một liên kết đến phần tử tiếp theo trong danh sách.
-
Thao tác chèn và xóa phần tử: ArrayList nhanh hơn trong việc truy cập vào các phần tử theo chỉ số, tuy nhiên, nếu cần chèn hoặc xóa phần tử ở giữa danh sách, nó phải di chuyển tất cả các phần tử phía sau lên hoặc xuống để tạo chỗ cho phần tử mới. Ngược lại, LinkedList có thể thêm và xóa phần tử một cách hiệu quả hơn đối với danh sách lớn, vì chỉ cần cập nhật liên kết giữa các phần tử.
-
Độ phức tạp thời gian: ArrayList tốt hơn trong việc truy cập ngẫu nhiên, do thời gian truy cập phần tử theo chỉ số là O(1). Ngược lại, LinkedList tốt hơn trong việc thêm, xóa và thay đổi phần tử, vì thời gian này chỉ phụ thuộc vào số lượng phần tử bị ảnh hưởng, thường là O(1).
-
Độ phức tạp không gian: ArrayList yêu cầu không gian cố định trước khi được khởi tạo và có thể phải tăng kích thước mảng khi thêm phần tử. Ngược lại, LinkedList chỉ yêu cầu thêm không gian cho các liên kết giữa các phần tử.
Tóm lại, ArrayList thích hợp cho các tình huống cần truy cập ngẫu nhiên và sửa đổi ít, trong khi LinkedList thích hợp cho các tình huống cần chèn, xóa và thay đổi nhiều phần tử.
Trong Java, quá trình thừa kế (inheritance) cho phép lớp con kế thừa các thuộc tính và phương thức từ lớp cha. Điều này giúp tạo ra các mối quan hệ "is-a" giữa các lớp, trong đó lớp con được xem là một phiên bản cụ thể hơn của lớp cha.
Để sử dụng thừa kế trong Java, ta sử dụng từ khóa "extends" để khai báo tên của lớp con và tên của lớp cha mà lớp con muốn kế thừa. Ví dụ:
class A { // lớp cha A
public void display() {
System.out.println("This is class A");
}
}
class B extends A { // lớp con B kế thừa từ lớp cha A
public void show() {
System.out.println("This is class B");
}
}
Trong ví dụ trên, lớp B kế thừa lớp A thông qua từ khóa "extends". Lớp B sẽ kế thừa phương thức "display()" từ lớp A và định nghĩa thêm phương thức "show()".
Để tạo một đối tượng của lớp B, ta có thể sử dụng như sau:
public class Main {
public static void main(String[] args) {
B obj = new B();
obj.display(); // sử dụng phương thức của lớp cha
obj.show(); // sử dụng phương thức của lớp con
}
}
Kết quả sẽ là:
This is class A
This is class B
Từ khóa "super" cũng được sử dụng trong quá trình thừa kế để tham chiếu đến lớp cha. Nó có thể được sử dụng để gọi phương thức của lớp cha, tránh việc xung đột tên phương thức giữa lớp cha và lớp con.
Interface và lớp trừu tượng là hai khái niệm quan trọng trong Java và có một số sự khác biệt.
-
Độ khái quát: Interface cung cấp một tập hợp các phương thức mà các lớp khác có thể triển khai. Nó đại diện cho một hợp đồng và không có thực thi. Trong khi đó, lớp trừu tượng là một lớp chứa ít nhất một phương thức trừu tượng, nhưng cũng có thể chứa các phương thức thông thường. Lớp trừu tượng không thể được khởi tạo và chỉ được sử dụng để kế thừa.
-
Đa kế thừa: Trong Java, một lớp chỉ có thể kế thừa một lớp khác, trong khi một interface có thể triển khai bởi nhiều lớp khác nhau. Do đó, interface cho phép triển khai đa kế thừa, trong khi lớp trừu tượng không thể.
-
Phiên bản: Khi một interface được cập nhật bằng cách thêm hoặc loại bỏ phương thức, các lớp triển khai gần đây vẫn phải triển khai lại tất cả các phương thức của interface. Trong khi đó, nếu một lớp trừu tượng thay đổi, chỉ các lớp con trực tiếp của nó phải thay đổi.
-
Mục đích sử dụng: Interface được sử dụng để triển khai sự tương tác giữa các đối tượng không liên quan nhau, trong khi lớp trừu tượng thường được sử dụng để chứa các phương thức chung cho các lớp con của nó.
-
Tính trừu tượng: Một interface là hoàn toàn trừu tượng, vì nó chỉ định các phương thức nhưng không có thực thi. Một lớp trừu tượng có thể chứa các phương thức trừu tượng và các phương thức thông thường.
Tóm lại, interface và lớp trừu tượng có những điểm tương đồng và khác biệt. Interface được sử dụng để triển khai hợp đồng không liên quan và hỗ trợ đa kế thừa, trong khi lớp trừu tượng chứa phương thức chung và hỗ trợ tính trừu tượng.
Bộ 32 câu hỏi phỏng vấn Java mới nhất hiện nay - TopCV
1 week ago Tiếp tục là một câu hỏi phỏng vấn khá lý thuyết. Thực tế Java không hướng đối tượng hoàn toàn. Thay vào đó nó có sử dụng các loại dữ liệu như char, byte, float,.. đều không phải là đối tượng.… See more
100+ câu hỏi phỏng vấn Java cùng hướng dẫn trả lời
6 days ago Dec 28, 2020 · 100+ câu hỏi phỏng vấn Java cùng hướng dẫn trả lời. Ra đời từ những năm 1990, chỉ sau 5 năm ra mắt, ngôn ngữ lập trình Java luôn đứng vững trong danh sách các ngôn ngữ …
Top 20 câu hỏi phỏng vấn Java OOP phổ biến nhất - Viblo
1 week ago 2. Các tính chất của hướng đối tượng là gì ? 3. Thế nào là lớp? 4. Thế nào là đối tượng? 5. Thế nào là tính đóng gói? 6.
100 + Java Câu hỏi và trả lời phỏng vấn (2024) - Guru99
1 day ago Nov 8, 2024 · Cốt lõi cơ bản Java Câu hỏi phỏng vấn: Q1. Sự khác biệt giữa Lớp bên trong và Lớp phụ là gì? Trả lời: Lớp Nội là lớp được lồng trong một lớp khác. Lớp bên trong có quyền …
Top 50 câu hỏi phỏng vấn Java có đáp án (Eng & Viet)
2 days ago Jan 17, 2023 · Java Reflection is a process of examining or modifying the run time behavior of a class at run time. The java.lang.Class class provides many methods that can be used to get …
Khám phá 46 câu hỏi phỏng vấn Java dành cho lập trình viên
1 week ago Dưới đây là danh sách 46 câu hỏi phỏng vấn Java dành cho người có nhiều kinh nghiệm, cùng với câu trả lời chi tiết. Những câu hỏi này bao gồm các chủ đề nâng cao trong Java, …
200 Câu hỏi phỏng vấn Java hay nhất - VietJack
4 days ago 200 Câu hỏi phỏng vấn Java - Học Java cơ bản và nâng cao cho người mới học về Ngôn ngữ hướng đối tượng, Ví dụ Java, Phương thức, Ghi đè, Tính kế thừa, Tính trừu tượng, Tính đa …
Top 10 câu hỏi phỏng vấn Java Developer thường gặp - TopDev
2 days ago Làm sao để tránh nó. Câu 9: Các interface cơ bản của Collections. Câu 10: Garbage Collectors là gì? Kết bài. Trong top những ngôn ngữ lập trình phổ biến thì Java luôn luôn có một vị trí vững …
Top 50 câu hỏi và câu trả lời phỏng vấn xin việc cho Java Core.
1 week ago Jul 21, 2023 · CodeGym / Blog Java / Ngẫu nhiên / Top 50 câu hỏi và câu trả lời phỏng vấn xin việc cho Java... Top 50 câu hỏi và câu trả lời phỏng vấn xin việc cho Java Core. Phần 1. Xin …
200 câu hỏi phỏng vấn Java - VietJack
1 week ago 200 câu hỏi phỏng vấn Java - Học Java cơ bản và nâng cao cho người mới học về Ngôn ngữ hướng đối tượng, Ví dụ Java, Phương thức, Ghi đè, Tính kế thừa, Tính trừu tượng, Tính đa …
Top 10 Câu Hỏi Phỏng Vấn Về Java Core - Viblo
6 days ago Top 10 Câu Hỏi Phỏng Vấn Về Java Core. Kiến thức nền tảng rất quan trọng! Nó không chỉ giúp ta phát triển nhanh và bền vững, mà còn giúp ta debug được những bug khoai, design những …
Câu hỏi phỏng vấn Java giúp bạn có được vị trí lập trình Java
3 days ago Jan 1, 2024 · Tm hiểu các câu hỏi phỏng vấn Java với hướng dẫn ''Các câu hỏi phỏng vấn Java'' này để có được vị trí mong muốn. Tôi hiểu được rằng bạn có thể cảm thấy bực bội hay thậm …
Top 40+ câu hỏi phỏng vấn Mobile Developer phổ biến
1 week ago Nov 12, 2024 · Top 50+ câu hỏi phỏng vấn OOP và trả lời mới nhất (Phần 1) Top 50+ câu hỏi phỏng vấn OOP và trả lời mới nhất (Phần 2) Các câu hỏi phỏng vấn Mobile Developer cụ thể …
200 câu hỏi phỏng vấn Java hay thường gặp, có đáp án tham khảo
6 days ago Jan 21, 2018 · 1. Nếu bạn đang chuẩn bị tham gia một buổi phỏng vấn Java thì việc chuẩn bị cho những câu hỏi về ngôn ngữ lập trình Java là cần thiết. Những câu hỏi phỏng vấn Java này …
Top 20+ câu hỏi phỏng vấn PHP phổ biến - ITviec Blog
5 days ago Nov 12, 2024 · Trang web động được viết bằng các ngôn ngữ như: ASP, PHP, Ruby, Java,… Trang web tĩnh chủ yếu chứa nội dung tĩnh và không yêu cầu một máy chủ ứng dụng để xử lý …
Top 30+ câu hỏi phỏng vấn Magento phổ biến - ITviec Blog
1 week ago Nov 12, 2024 · Kể tên các loại hình ảnh trong Magento. Có 4 loại hình ảnh trong Magento: Hình ảnh cơ bản (Base image): Hình ảnh cơ bản (Base image) là hình minh họa chính trên trang …
Chinh phục bộ câu hỏi phỏng vấn Junior Tester thường gặp
3 days ago 1 day ago · 1. Junior Tester là gì? Vai trò của Junior Tester trong dự án phần mềm. Trước khi đi sâu vào các câu hỏi phỏng vấn, bạn cần nắm rõ vai trò và trách nhiệm của một Junior Tester …
FAQs - Câu hỏi thường gặp về phỏng vấn?
Những câu hỏi thường gặp để phản ánh chính sách và quy trình cụ thể của bạn hoặc để phù hợp với mục đích cụ thể của phỏng vấn.