Cho class như sau: class KiemTra { private int i; private int nextId; public void setId() { id = nextId; nextId++; } } Nếu khởi tạo 2 đối tượng class A extends KiemTra và class B extends KiemTra, id của đối tượng A có giá trị là ?
Đáp án đúng: B
Đầu tiên, cần lưu ý rằng biến nextId
được khai báo là private, do đó nó chỉ có thể truy cập bên trong class KiemTra
. Tuy nhiên, đoạn code cho thấy trong phương thức setId()
, biến id
lại được gán giá trị từ nextId
. Biến id
chưa được khai báo trong class KiemTra
. Do đó đoạn code này sẽ không biên dịch được. Trong trường hợp nó là một biến thành viên của class thì nó phải được khai báo trước đó. Khi đó, mỗi khi một đối tượng (A hoặc B) được tạo ra, phương thức setId()
sẽ được gọi. Giá trị của nextId
sẽ được gán cho id
của đối tượng và sau đó nextId
tăng lên. Vì nextId
là biến thành viên của class KiemTra
, nên nó sẽ được khởi tạo mặc định là 0. Khi đối tượng A được tạo và setId()
được gọi, id
của A sẽ là 0 và nextId
sẽ tăng lên 1. Khi đối tượng B được tạo và setId()
được gọi, id
của B sẽ là 1 và nextId
sẽ tăng lên 2. Như vậy, id của đối tượng A là 0.