Poll: Kiểm tra kiến thức Core Java - 1.02

Let’s have a discussion about this problem and get the answer here http://www.indiabix.com/online-test/java-programming-test/61
2. What will be the output of the program?

public class Test 
{  
    public static void main(String args[])
    { 
        class Foo 
        {
            public int i = 3;
        } 
        Object o = (Object)new Foo();
        Foo foo = (Foo)o;
        System.out.println("i = " + foo.i);
    }
}

  • A. i = 3
  • B. Compilation fails.
  • C. i = 5
  • D. A ClassCastException will occur.
2 Likes

Bạn nào chọn A vào giải thích tại sao nhở

Đã chọn A, vì linh cảm mách bảo thế :trollface:

2 Likes

Không chơi với linh cảm :trollface:

1 Like

chắc là A, bởi vì chỉ có A, D là khá hợp lý, nhưng D fthì oo thì cast từ object qua, trong khi mọi instance đều kế thừa từ object nên có thể cast được mà ko lỗi.

Cũng ko chắc lắm, có đáp án ko bác chủ.

1 Like

Đáp án thì thiếu gì. :trollface: đang để cho mọi người debat :v:

1 Like

A. i = 3
Vì object o đã được Dropdown casting đến class Foo nên => i = 3

A vì dòng đầu o là đối tượng Foo
dòng 2 foo đối tượng kiểu Foo mà được sao chép từ o.
i là public được truy xuất từ ngoài.

dòng 2 là sao chép hay gán mình không chắc ăn.

1 Like

chủ thớt giải thích được chưa ạ, giải thích cho biết với ạ.

Lớp Object là cha của tất cả các lớp trong java một cách trực tiếp hay gián tiếp. Vì vậy nó có khả năng lưu giữ reference của bất cứ object nào.

Ở đây có 2 việc xảy ra. Tạo 1 đối tượng “o” lưu giữa reference của object Foo và downcasting từ Object xuống Foo.

Tại sao phải cần downcasting?. Vì i là của riêng Foo, chúng ta muốn truy cập biến i trong class Foo. 1 lần nữa phải downcasting nó xuống subclass.

Dạ, em có 1 thắc mắc ngu xuẩn là vì sao Foo foo = new Foo(); luôn mà lại phải lưu giữ reference làm gì vậy ạ, nó có tốn code, tốn thời gian khi chạy hơn không ạ.

Vậy thì còn gì là kiểm tra kiến thức

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?