Trong đoạn mã sau đây, có lẽ nó xuất hiện rằng nó nên ban hành một số lỗi biên dịch nhưng nó không:Sử dụng một tên lớp bên trong và một cái tên cùng một đối tượng trong Java
class Outer {
public static class Inner {
static String obj = "Inner";
}
static Optional Inner = new Optional();
//The (inner) class name and the object name are same.
}
class Optional {
String obj = "Optional";
}
public class Main {
public static void main(String[] args) {
System.out.println(Outer.Inner.obj);
//Refers to the string inside the optional class
}
}
Lớp Outer
có tĩnh lớp bên trong nó có tên là Inner
. Ngoài ra, nó tuyên bố một đối tượng (tĩnh) của lớp Optional
(static Optional Inner = new Optional();
)
Đối tượng này và tên lớp (bên trong lớp Outer
) giống nhau là Inner
. Chương trình hiển thị Optional
. Biểu thức duy nhất Outer.Inner.obj
trong phạm vi main()
được mong đợi sẽ hiển thị Inner
nhưng không. Tuy nhiên, đầu ra thực tế là Optional
là trường hợp của lớp Optional
.
Một cách để hiển thị Inner
là thay đổi tên đối tượng thành tên khác.
static Optional Inner1 = new Optional();
Từ đầu ra nó sẽ hiển thị, dường như tên đối tượng (hoặc một biến) được chọn thay vì một tên kiểu (lớp Inner
) bởi vì họ có cùng tên. Trường hợp chính xác nào được áp dụng ở đây?
+1 một câu trả lời rất hay! – GingerHead
Chăm sóc downvoter để bình luận? – GingerHead
Nó thực sự là một câu trả lời rất hay cho một câu hỏi chưa được hỏi ở đây. – LuGo