Local Class và Anonymous Class

Local class

Local class là class được tạo bên trong 1 block code, không phải trong class, vd như trong block for-each, if condition, try-catch-final. Local class chỉ tồn tại bên trong block và trong khi block đó được thực thi.

  • Member của local class có thể có modifier private, chỉ là từ private thôi, vẫn gọi bình thường từ bên trong block code đó.
  • Local class có thể truy cập member top-level class hiện tại, bao gồm cả member private. Nếu trùng tên với member của local class, có thể dùng class name của top-level class để reference đến member của top-level-class. (TopLevelClass.this.member)
  • Local class có thể truy cập biến của block code hiện tại, nhưng phải là final
  • Có thể extend class khác và implement interface, hoặc là local class khác, có thể là abstract class.
  • Không thể có member static, kể cả final
  • Không thể có inner class
  • Khi khai báo local clas trong block của member static, không thể reference đến member non-static của top-level class.
  • Local class có thể dùng variable trong block code bên ngoài, nhưng phải là final. Variable này cũng không được phép thay đổi giá trị bên trong local class.

Khi compile, mỗi class sẽ tạo ra 1 file class riêng biệt, với tên có quan hệ với Top-level class.

Anonymous Class

Anonymous Class được khai báo như 1 expression, dựa trên 1 interface hoặc class, trong đó tồn tại (các) method có quyền truy cập để anonymous class implement. Cách khai báo như sau:

Cách khai báo này có thể áp dụng cho biến local, instance, static class, cũng có thể dùng như 1 parameter miễn thoả mãn điều kiện về kiểu dữ liệu.

Các mục sau có thể được khai báo trong anonymous class:

  • Field (trừ static field, static final thì được)
  • các method khác (kể cả không phải từ class extend, implement)
  • Local class
  • Instance Initializers

Các mục sau không thể khai báo

  • contructors
  • static field (static final thì được)
  • static initializers
  • static method
  • member interface

Method mà anonymous class sẽ implement không cần public ở interface hoặc abstract class, chỉ cần có đủ quyền để truy cập được từ nơi gọi anonymous class.

Anonymous class có thể extend bất kỳ class nào. Không cần là abstract class cũng có thể extends.

Mấy cái lợi ích của Nested Class

Khi nào dùng loại nào?

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *