عمليات الكائنات وعمليات الأصناف

يوجد نوعين من العمليات في Java، يدعيان عمليات الأصناف (class methods) وعمليات الكائنات أو العمليات الكائنية (object methods). تميَّز عمليات الأصناف بالكلمة المفتاحية static في السطر الأول. أي عملية لا تملك الكلمة المفتاحية static تكون عملية كائنية.
بالرغم من أننا لم نكتب أية عمليات كائنية حتى الآن، إلا أننا قد استدعينا بعضاً منها. كلما تستدعي عملية "على" كائن، تكون هذه العملية عملية كائنية. مثلاً، charAt وغيرها من العمليات التي استدعيناها على كائنات String كانت كلها عمليات كائنية.
أي شيء يمكن كتابته كعملية صنف يمكن كتابته أيضاً كعملية كائن، والعكس صحيح. لكن في بعض الأحيان سيكون استعمال أحد النوعين طبيعياً أكثر من استعمال النوع الآخر.
مثلاً، هذه هي العملية printCard مكتوبة كعملية صنف:
كود:
public static void printCard(Card c) {
   System.out.println(ranks[c.rank] + " of " + suits[c.suit]);
}
وها هي كعملية كائنية:
كود:
public void print() {
   System.out.println(ranks[rank] + " of " + suits[suit]);
}
ها هي الاختلافات بين النسختين:
1. أزلت الكلمة static.
2. غيرت اسم العملية ليكون معبراً أكثر.
3. أزلت المعامل.
4. يمكنك الإشارة إلى متغيرات الحالة كما لو كانت متغيرات محلية داخل عمليات الكائنات، لذا غيرت c.rank إلى rank، كما قمت بنفس التغيير مع suit.
سيتم استدعاء هذه العملية بالشكل التالي:
كود:
Card card = new Card(1, 1);
card.print();
عندما تستدعي عملية على كائن، يصبح ذلك الكائن الكائن الحالي (current object)، ويعرف أيضاً بthis. داخل print، تشير this إلى كائن Card الذي تم استدعاء العملية عليه.