Hỏi về static method và instance method

Mình có vấn đề này đang phân vân là nên dùng static method hay instance method đu kết quả như nhau:

MyClass.staticMethod();

MyClass obj = new MyClass();//Create an instance
obj.nonstaticMethod();

Vậy khi nào nên dùng static method, khi nào nên dùng instance method?
Cám ơn mọi người.

Hi Sy,

Tớ list dưới đây các trường hợp mà tớ nhớ ra khi sử dụng static method & instance method. Nếu có gì cần bổ sung, mọi người bổ sung giúp tớ nhé!

Đây là các trường hợp cậu nên sử dụng instance method:

  • Khi method đó là hành vi của 1 object. 1 chiếc xe đạp có thể chạy được -> “chạy được” là hành vi.
  • Khi cậu có áp dụng đa hình. Hiển nhiên rồi phải ko? :slight_smile:
  • Khi cậu cần trừu tượng hóa các hành vi của object. Cậu không thể làm điều đó với static method.
  • Khi cậu muốn đóng gói các hành vi của 1 object. Static method không cần tới object để thực thi, vậy nên nó không thể đại diện cho hành vi của 1 object được.

Đây là các trường hợp cậu nên sử dụng static method:

  • Khi cậu cần hiệu năng cao.
  • Khi cậu phải maintain code toàn sử dụng static method.
  • Khi cậu cần viết utility function - các hàm tiện ích không thuộc về bất cứ object nào.
  • Khi cậu sử dụng procedure programming ở Java/C#
  • Khi method của cậu viết ra đại diện cho toàn bộ class. Cậu có thể gặp điều này khi implement 1 số design pattern như Singleton, Factory, Builder.

Nhìn chung, nếu cậu áp dụng OOP, nhìn chung, cậu nên sử dụng instance method càng nhiều càng tốt (cậu có thể thấy tất cả các tính chất của OOP trong instance method).
Tuy cá nhân tớ không khuyến khích sử dụng static method, vì thường nó sẽ phá vỡ tính chất đóng gói, nhưng đôi khi, 1 vài class Utils hoặc 1 vài static method sẽ giúp cho implement của cậu đỡ phức tạp đi rất nhiều. Vậy nên, cậu có thể cân nhắc :slight_smile:

Hi vọng câu trả lời của tớ giúp cậu.

7 Likes

Tks bạn rất nhiều :grinning:

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