Câu hỏi tuyển dụng Java Core (phần 4)

Câu hỏi tuyển dụng Java Core (phần 4)
Câu 11: Kiểu nguyên thủy và lớp wrapper(loại nào tham biến, loại nào tham trị)

với những kiêu nguyên thủy của Java (int, boolean..) chỉ có thể được truyền theo kiểu tham trị, tức là giá trị của x vẫn giữ nguyên sau khi gọi hàm.
Các đối tượng như String thì có thể truyền tham biến

Câu 12. Kiểu dữ liệu tham chiếu:là các kiểu dữ liệu đối tượng.

Trong java có 3 kiểu dữ liệu tham chiếu
- Mảng(Array): Tập hợp các dữ liệu cùng loại
- Lớp(Class): Tập hợp các biến và phương thức
- Giao diện(Interface): Là 1 lớp trừu tượng được tạo ra để bổ sung cho các kế thừa đa lớp trong java

Câu 13. Các khai báo quyền truy xuất và kế thừa của Lớp

-public:được phép truy xuất từ bất cứ nơi nào và bất cứ lớp nào cũng được quyền kế thừa
-protected:chỉ có phương thức cùng gói được phép truy xuất và kế thừa
-private:chỉ có phương thức cùng gói được phép truy xuất nhưng không lớp nào được phép kế thừa
-nếu không khai báo,mặc định là protected

Câu 14. Ý nghĩa của từng chỉ định thuộc tính

Có 6 chỉ định thuộc tính là static, abstract, final, native, synchronized (đồng bộ) và volatile (linh hoạt)
Nếu là một phương thức không tĩnh, đầu tiên bạn phải khởi tạo một đối tượng,sau đó mới được phép gọi phương thức
Nếu là một phương thức tĩnh,bạn được phép gọi trực tiếp từ lớp
Một phương thức trừu tượng không có nội dung.Nội dung của nó sẽ được các lớp con tùy biến và phát triển theo hướng của riêng nó.
- final: không thể được extends hay override (ghi đè)
- native: thân phương thức viết bằng C hay C++
- synchronized: chỉ cho phép 1 thread truy cập vào khối mã ở cùng một thời điểm
- volatile: sử dụng với biến để thông báo rằng giá trị của biến có thể được thay đổi vài lần vì vậy không ghi vào thanh ghi
.Từ thứ 3 là giá trị trả về.Nếu không có giá trị trả về thì là void

Câu 15. Interface, abstract class

What is an Abstract Class?
Lớp trừu tượng đơn giản được xem như một class cha cho tất cả các Class có cùng bản chất. Do đó mỗi lớp dẫn xuất (lớp con) chỉ có thể kế thừa từ một lớp trừu tượng. Bên cạnh đó nó không cho phép tạo instance, nghĩa là sẽ không thể tạo được các đối tượng thuộc lớp đó.

What is an Interface?
Lớp này được xem như một mặt nạ cho tất cả các Class cùng cách thức hoạt động nhưng có thể khác nhau về bản chất. Từ đó lớp dẫn xuất có thể kế thừa từ nhiều lớp Interface để bổ sung đầy đủ cách thức hoạt động của mình (đa kế thừa - Multiple inheritance).
Ví dụ:
- Abstract class ConVat có các lớp con Chim, Ca.
- Abstract class MayMoc có các lớp con MayBay, Thuyen
- Interface: iBay, iBoi, iChay.
=> MayBay, Chim sẽ có cùng Interface là iBay. Rõ ràng mặc dù MayBay, Chim có cùng cách thức hoạt động là bay nhưng chúng khác nhau về bản chất.
=> MayBay cũng có interface là iChay nhưng Chim không thể nào kế thừa thêm abstract classMayMoc

Giao diện được khai báo giống như 1 lớp, cũng có state và behavior. Nhưng state của giao diện là final còn behavior là abstract

* Bạn chỉ có thể thừa kế (extend) từ một class và chỉ có thể hiện thực (implement) các chức năng (interface) cho class của mình.

Câu 16. Phân biệt abstract class với class (như trên)

Câu 17. Biến của interface khai báo thế nào?

static - because Interface cannot have any instance. and final - because we do not need to change it

Câu 18. phân biệt final và static

Từ khóa final:
Nếu lớp A là final thì lớp A sẽ không được kế thừa bởi bất kỳ lớp nào.
Thuộc tính final: có giá trị không đổi

Từ khóa static:
Truy cập: Không cần tạo đối tƣợng
Method: Không sử dụng từ khóa this, Gọi mà không cần khởi tạo đối tƣợng

Câu 19. static và non-static

Biến static chỉ là một biến không phụ thuộc vào một đối tượng nào cả, tức là mình có thể truy vấn trực tiếp mà không cần phải khời tạo đối tượng.

VD: Mình có một class tên là A trong class A có một biến static tên là abc=10;
Khi mình gọi biến này mình bằng cách: A obj = new A(); và truy vấn đến biến đó bằng cách thông thường là obj.abc. Điều đó là dư thừa, mà thay vì vậy mình có thể truy vấn một cách trực tiếp mà không cần khởi tạo đối tượng như mình đã đề cập, bạn có thể truy vấn trực tiếp tới biến đó bằng cách A.abc.

Tương tự cho hàm static, mình cũng chỉ cần gọi <tên lớp>.<tên hàm>.
Vậy cũng có thể dễ dàng đoán được rằng khi chạy ứng dụng thì thằng static đã được tạo ra mà không cần phải khởi tạo

Câu 20: Phân biệt biến class và đối tượng

1 comment:

  1. Câu 13. Các khai báo quyền truy xuất và kế thừa của Lớp:
    -nếu không khai báo,mặc định là protected
    => câu này chưa chính xác
    nếu:
    - protected: có thể truy suất trong package và class con kế thừa từ nó.
    - không khai báo: có thể truy suất trong package. Class con kế thừa từ nó cũng ko truy cập dc

    ReplyDelete