Java Interview Question

1. Interface vs Abstract Class (Java 11+)

Key difference

Tiêu chíInterfaceAbstract Class
Đa kế thừaImplement multi interface
State (instance field)Chỉ public static finalCó thể giữ state
ConstructorKhông có
Methodsabstract, default, staticprivate (java 9+)abstract, concrete, static, final
Access ModifierLuôn publicpublic, protected, private, default
Mục đíchContract/capability ("can-do")Partial implementation/template (is-a)

Note: Interface không thể giữ state - abstract class thì có. Vì sau java 8 interface có defaultstatic methods.

Khi nào dùng gì?

Interface:

  • Định nghĩa capability cho nhiều class không liên quan (ComparableAutoCloseable)
  • Cần đa kế thừa type
  • Public API contract cho bên thứ ba implement
  • Functional interface cho lambda Abstract Class:
  • Các subclass chia sẻ state chung
  • Template method pattern (HttpServlet.service() → doGet/doPost)
  • Cần constructor để enforce invariant
  • Cần protected methods

Tips

  • Ưu tiên Interface để decouple, chỉ dùng abstract class khi có 3 subclass chia sẻ state hoặc logic chung không đáng kể.
  • Đừng quên Interface field là public static final -> vô tình expose constant.
  • private method không phải abstract - vì subclass không thể override cái nó không thấy.
  • Vì sao cần private method trong interface? để tái sử dụng code giữa các default/static method mà không expose ra ngoài. trước java 9 muốn chia sẻ logic thì phải tạo static method nhưng như vậy nó thành public api.

Ví dụ với Articles, BlogPosting và NewsArticle

Khi implement seo schema cho 2 loại page thì dùng interface hay abstract class.

Có shared state không?
├── Có  → Abstract class (hoặc abstract + interface nếu cần đa type)
└── Không
    ├── Chỉ cần contract?  → Interface
    └── Có shared behavior? → Default method trong interface