البنية الأساسية في البرمجة كائنية التوجه في Java هي الصنف، وهو مزيج من البيانات (الحقول)، وتُعرف أيضًا بمتغيرات النسخة، والسلوك (الطُرق). وتُعرف حقول الصنف وطُرقه باسم أعضائه.
يمكن التحكم في الوصول إلى الأعضاء عبر محدِّدات الوصول، وأكثرها شيوعًا اثنان:
public: يمكن لأي كود الوصول إلى العضو (دون قيود).private: لا يمكن الوصول إلى العضو إلا من كود داخل الصنف نفسه.في Java، إذا لم يُحدَّد أي محدِّد وصول، فالوضع الافتراضي هو الظهور على مستوى الحزمة. وفي هذه الحالة يكون العضو مرئيًا لجميع الأصناف المعرَّفة داخل الحزمة نفسها.
يُعرف تجميع البيانات والسلوك المرتبطين المذكور أعلاه، مع تقييد الوصول إلى الأعضاء، باسم التغليف، وهو أحد المفاهيم الأساسية في البرمجة كائنية التوجه.
يمكنك التفكير في الصنف على أنه قالب لإنشاء نسخ منه. ولإنشاء نسخة من صنف (وتُعرف أيضًا باسم الكائن)، تُستخدم الكلمة المفتاحية new:
class Car {
}
// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();
الحقول لها نوع واسم (يُكتب الاسم بأسلوب camelCase)، ويمكن تعريفها في أي مكان داخل الصنف (ويُكتب اسم الصنف بأسلوب PascalCase).
class Car {
// Accessible by anyone
public int weight;
// Only accessible by code in this class
private String color;
}
يمكنك اختياريًا إسناد قيمة ابتدائية لحقل. وإذا لم يُحدِّد الحقل قيمة ابتدائية، فسيُضبط على القيمة الافتراضية لنوعه. ويمكن الوصول إلى قيم حقول النسخة وتحديثها باستخدام الترميز النقطي.
class Car {
// Will be set to specified value
public int weight = 2500;
// Will be set to default value (0)
public int year;
}
Car newCar = new Car();
newCar.weight; // => 2500
newCar.year; // => 0
// Update value of the field
newCar.year = 2018;
عادةً ما تُحدَّث حقول private كأثر جانبي لاستدعاء طريقة. وهذه الطُرق لا تُرجع عادةً أي قيمة، وفي هذه الحالة ينبغي أن يكون نوع الإرجاع void:
class CarImporter {
private int carsImported;
public void importCars(int numberOfCars)
{
// Update private field
carsImported = carsImported + numberOfCars;
}
}
لاحظ أنه ليس من المعتاد استخدام حقول public في أصناف Java. فعادةً ما تُستخدم حقول private التي يُوصَل إليها عبر الدوال القارئة والكاتبة.
داخل الصنف، تشير الكلمة المفتاحية this إلى الصنف الحالي. ويكون هذا مفيدًا بشكل خاص إذا حمل معامل الاسم نفسه الذي يحمله حقل:
class CarImporter {
private int carsImported;
public void setImportedCars(int carsImported)
{
// Update private field from public method
this.carsImported = carsImported;
}
}