Câu 1: Compile và chạy chương trình sau kết quả là? (chọn 1 đáp án)
1 2 3 4 5 6 7 8 9 10 |
interface A{ public abstract void method1(); } interface B extends A{} abstract class C implements B { public abstract void method2(); } class D extends C{ public void method2(){} } |
A. Compile success
B. Dòng số 2 compile error
C. Dòng số 4 compile error
D. Dòng số 5 compile error
E. Dòng số 8 compile error
Câu 2: Hãy chọn code điền vào chỗ trống ① để chương trình compile success (chọn 4 đáp án)
1 2 3 4 5 6 7 8 |
interface A{} class B implements A{ public static void main(String[] args){ 「①」 obj = new D(); } } class C extends B{} class D extends B{} |
A. A
B. B
C. C
D. D
E. Object
F. Class
Câu 3: Chọn câu đúng khi nói về code sử dụng tính đa hình
A. Khi nhiều class con kế thừa 1 class cha thì tất cả class con đều có thể khai báo method có param giống param của method của class cha
B. Khi gán object của class cha cho 1 biến có kiểu của class con thì phải ép kiểu (casting)
C. Khi gán object của class con cho 1 biến có kiểu của class cha thì phải ép kiểu (casting)
D. Khi ép kiểu lỗi thì có thể phát hiện ngay từ khi compile
E. Cho dù class con ovverride method của class cha nhưng nếu method đó ở class cha là public thì khi sử dụng sẽ mặc định là dùng method của class cha
Câu 4. Câu nào dưới đây đúng ( chọn 1 đáp án)
1 2 3 4 5 |
public interface Test{ int number = 100; public static String method(); public int foo(){ return 0; } } |
A. Dòng thứ 2 compile error
B. Dòng thứ 3 compile error
C. Dòng thứ 4 compile error
D. Dòng thứ 2 và 3 compile error
E. Dòng thứ 3 và 4 compile error
Câu 5: Compile và chạy chương trình sau kết quả là gì? (chọn 1 đáp án)
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Test { int num = 10; class Foo{ static int num = 50; void show(){ System.out.println(num);} } public static void main(String[] args){ Test obj = new Test(); Test.Foo foo = obj.new Foo(); foo.show(); } } |
A. 10
B. 50
C. Dòng số 4 compile error
D. Dòng số 5 compile error
E. Dòng số 9 compile error
F. Dòng số 10 compile error
Câu 6: Câu nào sau đây là đúng (chọn 1 đáp án)
1 2 3 4 5 6 |
class Outer{ private String str; private class Inner{ public boolean bar() { return true;} } } |
A. Dòng số 3 compile error
B. Dòng số 4 compile error
C. Compile success và Outer.class được tạo ra
D. Compile success , Outer.class và Inner.class được tạo ra
E. Compile success , Outer.class và Outer$Inner.class được tạo ra
Câu 7: Compile và chạy chuowgn trình sau kết quả là gì? ( chọn 1 đáp án)
1 2 3 4 5 6 7 8 9 10 11 |
public class Test{ static interface A{} static class B implements A {} static class C extends B {} public static void main(String[] args){ C c = new C(); A a = c; if (c instanceof A) System.out.print("1 ") if (c instanceof A) System.out.print("1 ") } } |
A. compile error
B. runtime error
C. compile success nhưng ko có gì hiện ra
D. 1
E. 1 2
F. 2
Câu 8: Chọn đoạn code ở ① để chương trình chạy bình thường (chọn 1 đáp án)
1 2 3 4 5 6 |
public class Test{ class Foo{} public static void main(String[] args){ 「①」 } } |
A. Foo obj = new Foo();
B. Foo obj = Test.new Foo();
C. Test.Foo obj = new Test.Foo();
D. Test.Foo obj = new Test().Foo();
E. Test.Foo obj = new Test().new Foo();
F. Test.Foo obj = Test.new Foo()
Câu 9: Chọn code có thể viết ở ① để chương trình compile success (chọn 3 đáp án)
1 2 3 4 5 6 |
public class Test{ void bar(){} class Foo extends Test{ 「①」 } } |
A. public void bar(){}
B. final void bar()
C. static void bar(){}
D. void bar() throws Exception
E. void bar(int a){}
Câu 10: Interface nào dưới đây được gọi là function interface (chọn 2 đáp án)
1 2 3 4 5 6 |
interface A{ String x(); } abstract class B { abstract void y(int 1, int b);} interface C extends D{ default int z(); } interface D extends A {} |
A. A
B. B
C. C
D. D
Câu 11: Câu nào sau đây đúng (chọn 1 đáp án)
1 2 3 |
interface A{ String x(); } interface B { public abstract void y(int 1, int b);} abstract class C implements A, B {} |
A. Dòng 1 compile error
B. Dòng 2 compile error
C. Dòng 3 compile error
D. Dòng 2 và 3 compile error
E. Dòng 1, 2 và 3 compile error
F. compile success
- Nested class mà ko khai báo static thì ko dc có thành phần là static
Ví dụ:
1 2 3 4 5 6 7 8 9 10 |
class OuterClass { class InnerClass { static a; //complie error } } class OuterClass { static class InnerClass { static a; //complie done } } |
- Nested class khi compile sẽ tạo ra class có tên OuterClass$InnerClass.class
- Local class:
Không được có thành phần static
Không được khai báo public, proteted, private
Có thể tham chiếu đến đối số của method bên ngoài hoặc biến của class bên ngoài nhưng ko thay đổi dc (tự động set final) => chỉ thay đổi dc thuộc tính của chính local class
- Enum có abtract method => các value phải implement
- Enum có thể khai báo phương thức constructor nhưng vì ko thể tạo enum bằng new nên constructor phải là private nếu ko sẽ complie error
- Thứ tự ưu tiên overload:
完全一致 -> 暗黙 -> Autoboxing -> 可変長引数
(param giống hoàn toàn -> param sau khi convert ngầm -> param có autoboxing -> biến có số lượng thay đổi được)
- param có số lượng thay đổi chỉ dc khai báo ở cuối trong danh sách param của method
- Phương thức của lớp cha ko có static thì lớp con override cũng ko dc thêm static
- 2 object equals true thì 2 hashcode phải giống nhau nhưng equals false thì hashcode có thể bằng hoặc không
- hashcode dùng để tăng hiệu suất tìm kiếm
- Ví dụ Gọi phương thức của inner class
1 2 3 4 5 6 7 8 9 10 |
public class Outer{ public class Inner{ public void doIt(){ System.out.println("Outer.Inner.Doit()") } } } //Gọi phương thức doIt Outer.Inner inner = new Outer().new Inner() inner.Doit() |
- Nếu class implement 2 interface có method trùng tên nhưng 1 interface là method đã override còn 1 interface là method được truyền lại từ cha thì ko xảy ra xung đột mà class dùng method đã override.
- Enum giống với class có thể khai báo private protected nếu là nested. Ko khai báo final dc vì mặc định là final nhưng vẫn có thể khai báo static