logo

أنواع الفئات في جافا

في جافا، فصل هو مخطط يمكننا من خلاله إنشاء كائن فردي. توفر جافا أ الكلمة الرئيسية فئة محددة يمكننا من خلالها إعلان فئة. داخل الفصل نحدد فصل الأعضاء والوظائف. ليس من الممكن خلق برامج جافا بدون فئة. يمكننا أيضًا الإشارة إلى الفصل باسم a تعريف المستخدم أنواع الفصول

الاتصالات المحجوبة

هناك سبعة أنواع من الفئات في جافا:

    فئة ثابتة الدرجة النهائية فئة مجردة فئة الخرسانة فئة سينجلتون فئة بوجو الطبقة الداخلية
أنواع الفئات في جافا

فئة ثابتة

في Java، static هي كلمة أساسية تدير الكائنات الموجودة في الذاكرة. ينتمي الكائن الثابت إلى الفئة بدلاً من مثيل الفئة.

يمكننا أن نجعل فئة ثابتة إذا وفقط إذا كانت فئة متداخلة. يمكننا أيضًا أن نقول أن الفئات الثابتة تُعرف بالفئات المتداخلة. وهذا يعني أن الفئة التي تم الإعلان عنها على أنها ثابتة داخل فئة أخرى تُعرف بالفئة الثابتة. لا تتطلب الفئة الثابتة المتداخلة الرجوع إلى الفئة الخارجية. الغرض من الفئة الثابتة هو توفير الخطوط العريضة لفئتها الموروثة.

خصائص الفئة الثابتة هي:

  • يحتوي الفصل على أعضاء ثابتين فقط.
  • لا يمكنه الوصول إلى عضو (غير ثابت) من الطبقة الخارجية.
  • لا يمكننا إنشاء كائن من الفئة الثابتة.

دعونا نفهم مفهوم الطبقة الثابتة من خلال البرنامج.

StaticClassExample.java

 public class StaticClassExample { private static String str = 'Javatpoint'; //nested class which is a Static class public static class StaticDemo { //non-static method of Static class public void show() { System.out.println(str); } } public static void main(String args[]) { StaticClassExample.StaticDemo obj = new StaticClassExample.StaticDemo(); obj.show(); } } 

انتاج:

 Javatpoint 

في الطبقة الخارجية للبرنامج أعلاه، قمنا بإعلان متغير شارع كثابت لأننا نصل إلى هذا المتغير من سياق ثابت. إذا أعلنا أن هذا المتغير غير ثابت، فسيظهر المترجم خطأ بسبب لا يمكن للفئة الثابتة المتداخلة الوصول إلى الأعضاء غير الثابتين في الفئة الخارجية.

الشيء الثاني الذي يجب ملاحظته في البرنامج أعلاه هو أنه لإنشاء كائن من الفئة المتداخلة لا نحتاج إلى إنشاء مثيل للفئة الخارجية. إذا لم تكن الفئة المتداخلة فئة ثابتة، فسنحتاج إلى إنشاء مثيل للفئة الخارجية.

الدرجة النهائية

الكلمة النهائية تعني أنه لا يمكن تغييرها. ال أخير يمكن الإعلان عن فئة في Java باستخدام الكلمة الأساسية النهائية . بمجرد أن نعلن أن الفصل الدراسي نهائي، تظل القيم كما هي طوال البرنامج. الغرض من الفصل النهائي هو إنشاء الفصل غير قابل للتغيير مثل فئة السلسلة. إنها مجرد طريقة لجعل الفصل غير قابل للتغيير. تذكر أن لا يمكن تمديد الفصل النهائي . إنه أيضًا يمنع الفصل من أن يكون مصنفًا فرعيًا .

دعونا نفهم مفهوم الفصل النهائي من خلال البرنامج.

FinalClassExample.java

 //base class declared as final final class A { void printmsg() { System.out.print('Base class method is executed.'); } } //derived class //extending a final class which is not possible //it shows the error cannot inherit final class at compile time class B extends A { void printmsg() { System.out.print('Derived class method is executed.'); } } //main class public class FinalClassExample { public static void main(String[] arg) { B obj = new B(); obj.printmsg(); } } 

انتاج:

 /FinalClassExample.java:11: error: cannot inherit from final A class B extends A 

فئة مجردة

ان فئة مجردة هو ما تم الإعلان عنه باستخدام الكلمة الأساسية خلاصة . قد يحتوي الفصل أو لا يحتوي على طرق مجردة. لا يمكننا إنشاء مثيل لفئة مجردة ولكن يمكن أن تكون فئة فرعية. هذه الفئات غير مكتملة، لذا لإكمال الفصل المجرد، يجب علينا توسيع الفئات المجردة إلى فصل ملموس. عندما نعلن عن فئة فرعية على أنها مجردة، فمن الضروري توفير تنفيذ الأساليب المجردة. لذلك، يجب أيضًا تعريف الفئة الفرعية بأنها مجردة. يمكننا تحقيق إخفاء البيانات باستخدام فئة مجردة. مثال على فئة مجردة هو AbstarctMap فئة تعد جزءًا من إطار عمل المجموعات.

دعونا نفهم مفهوم الطبقة المجردة من خلال البرنامج.

AbstractClassExample.java

 //abstract class abstract class MathematicalOperations { int a=30, b=40; //abstract method public abstract void add(); } public class Operation extends MathematicalOperations { //definition of abstract method public void add() { System.out.println('Sum of a and b is: 'a+b); } public static void main(String args[]) { MathematicalOperations obj = new Operation(); obj.add(); } } 

انتاج:

 Sum of a and b is: 70 

فئة الخرسانة

هذه هي فئات جافا العادية. تُعرف الفئة المشتقة التي توفر التطبيقات الأساسية لجميع الأساليب التي لم يتم تنفيذها بالفعل في الفئة الأساسية باسم a أسمنت فصل. بمعنى آخر، إنها فئات Java عادية يتم فيها تنفيذ جميع أساليب الفصل المجرد. يمكننا إنشاء كائن من الطبقة الملموسة مباشرة. تذكر أن الطبقة الملموسة والطبقة المجردة ليسا متماثلين. قد تقوم الطبقة الملموسة بتوسيع فئتها الأصلية. يتم استخدامه لمتطلبات محددة.

دعونا نفهم مفهوم الطبقة الملموسة من خلال البرنامج.

ConcreteClassExample.java

 //Concrete Class public class ConcreteClassExample { //method of the concreted class static int product(int a, int b) { return a * b; } public static void main(String args[]) { //method calling int p = product(6, 8); System.out.println('Product of a and b is: ' + p); } } 

انتاج:

 Product of a and b is: 48 

فئة سينجلتون

تُعرف الفئة التي تحتوي على كائن فقط في كل مرة باسم a فئة مفردة . ومع ذلك، إذا كنا نحاول إنشاء مثيل مرة ثانية، فإن هذا المثيل الذي تم إنشاؤه حديثًا يشير إلى المثيل الأول. إذا أجرينا أي تغيير داخل الفصل من خلال أي مثيل، فإن التعديل يؤثر على متغير مثيل واحد أيضا. يتم استخدامه عادةً للتحكم في الوصول أثناء التعامل مع اتصال قاعدة البيانات وبرمجة المقبس. إذا أردنا إنشاء فئة فردية، فقم بما يلي:

  • إنشاء خاص البناء .
  • قم بإنشاء طريقة ثابتة (باستخدام التهيئة البطيئة) تُرجع كائن الفئة المفردة.

SingletonClassExample.java

 public class Singleton { private String objectState; private static Singleton instance = null; private Singleton() throws Exception { this.objectState = 'Javatpoint'; } public static Singleton getInstance() { if(instance==null) { try { instance=new Singleton(); } catch(Exception e) { e.printStackTrace(); } } return instance; } public String getObjectState() { return objectState; } public void setObjectState(String objectState) { this.objectState = objectState; } } 

انتاج:

 Javatpoint 

فئة بوجو

في جافا، يشير POJO إلى كائن جافا القديم العادي. تُعرف فئة Java التي تحتوي على متغيرات خاصة فقط، مثل setter وgetter بوجو فصل. يتم استخدامه لتعريف كائنات Java التي تزيد من قابلية إعادة الاستخدام وسهولة القراءة لبرنامج Java. يوفر الفصل التغليف. يتم استخدامه على نطاق واسع في Java لأنه من السهل فهم هذه الفئات. تتميز فئة POJO بالخصائص التالية:

  • ولا يقوم بتوسيع الفئات المحددة مسبقًا مثل Arrays وHttpServlet وما إلى ذلك.
  • ولا يمكن أن يحتوي على تعليقات توضيحية محددة مسبقًا.
  • لا يمكن تنفيذ محددة مسبقا واجهات .
  • ليس من الضروري إضافة أي منشئ.
  • يجب أن تكون جميع متغيرات المثيلات خاصة.
  • المُحصل/ الواضع طُرق يجب أن تكون عامة.

دعونا نفهم مفهوم فئة POJO من خلال برنامج جافا.

PojoClassExample.java

 class PojoDemo { //private variable private double price=89764.34; //getter method public double getPrice() { return price; } //setter method public void setPrice(int price) { this.price = price; } } //main class public class PojoClassExample { public static void main(String args[]) { PojoDemo obj = new PojoDemo(); System.out.println('The price of an article is '+ obj.getPrice()+' Rs.'); } } 

انتاج:

 The price of an article is 89764.34 Rs. 

الطبقة الداخلية

تتيح لنا Java تحديد فئة داخل فئة وتعرف هذه الفئات باسم فئات متداخلة . يتم استخدامه لتجميع الفئات بشكل منطقي وتحقيقه التغليف . يمكن الوصول إلى أعضاء الطبقة الخارجية (بما في ذلك القطاع الخاص) عن طريق الطبقة الداخلية . بناء الجملة العام للإعلان عن الفئة المتداخلة هو كما يلي:

 class OuterClass { //code class NestedClass { //code } } 

الفئات المتداخلة هي من نوعين:

1. فئة متداخلة ثابتة: فئة ذلك ثابتة و متداخلة تسمى فئة متداخلة ثابتة. يتفاعل مع عضو المثيل من فئته الخارجية. يمكننا إنشاء كائن من الفئة المتداخلة الثابتة باستخدام الصيغة التالية:

 OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); 

2. فئة متداخلة غير ثابتة: يتم استدعاء الفئات المتداخلة غير الثابتة الطبقات الداخلية .

بناء الجملة العام للإعلان عن الفئة المتداخلة الثابتة والفئة الداخلية هو كما يلي:

 class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... } } 

دعونا نفهم مفهوم الطبقة الداخلية من خلال برنامج جافا.

InnerClassExample.java

 public class InnerClassExample { public static void main(String[] args) { System.out.println('This is outer class.'); } class InnerClass { public void printinner() { System.out.println('This is inner class.'); } } } 

أنواع الطبقات الداخلية

توفر Java نوعين من الفئات الداخلية كما يلي:

افعل بينما java

الطبقة الداخلية المحلية

إنه نوع من الطبقة الداخلية التي يتم تعريفها داخل الكتلة. تشير الكتلة هنا إلى نص الطريقة (مجموعة من العبارات المحاطة بين زوج من الأقواس). نظرًا للتعريف داخل الكتلة، يُعرف أيضًا باسم الطبقة الداخلية المحلية للطريقة. هذه هي الفئات غير الثابتة لأنها تستطيع الوصول إلى أعضاء مثيل الكتلة. يمكننا تحديد الفئات الداخلية المحلية في نص الطريقة. يجب إنشاء مثيل لهذه الفئات في الكتلة التي تم تعريفها فيها.

عندما نقوم بتجميع برنامج Java (برنامج يحتوي على فئة داخلية)، يقوم المترجم بإنشاء ملفي الفئة وهما الطبقة الخارجية و الخارجيInner.class. أحدهما للفئة الخارجية والآخر للفئة الداخلية التي تحتوي على مرجع للفئة الخارجية.

دعونا نفهم مفهوم الطبقة الداخلية المحلية من خلال برنامج جافا.

OuterClass.java

 public class OuterClass { private void getValue() { //if you are using Java 7 make the variable final //if you are using Java 8 the code runs successfully int sum = 20; //declaring method local inner class class InnerClass { public int divisor; public int remainder; public InnerClass() { divisor = 4; remainder = sum%divisor; } private int getDivisor() { return divisor; } private int getRemainder() { return sum%divisor; } private int getQuotient() { System.out.println('We are inside the inner class'); return sum / divisor; } } //creating an instance of inner class InnerClass ic = new InnerClass(); System.out.println('Divisor = '+ ic.getDivisor()); System.out.println('Remainder = ' + ic.getRemainder()); System.out.println('Quotient = ' + ic.getQuotient()); } public static void main(String[] args) { //creating an instance of outer class OuterClass oc = new OuterClass(); oc.getValue(); } } 

انتاج:

 Divisor = 4 Remainder = 0 We are inside the inner class Quotient = 5 

فئة داخلية مجهولة

إنه نوع من الفئة الداخلية يشبه الفئات المحلية ولكن الاختلاف الوحيد هو أن الفئة ليس لها اسم فئة ويتم إنشاء كائن واحد من الفئة. يجعل الكود أكثر إيجازا. يتم استخدامه إذا أردنا استخدام الفصل المحلي مرة واحدة. يمكننا إنشاء فئات مجهولة بالطريقتين التاليتين:

  • باستخدام واجهة
  • من خلال إعلان الطبقة ملموسة ومجردة

بناء الجملة:

 // the class may an interface, abstract or concrete class DemoClass obj = new DemoClass() { //methods //data members public void demomethod() { //statements } }; 

بالنظر إلى بناء الجملة أعلاه، نرى أنه مماثل لاستدعاء المُنشئ باستثناء أن الفئة لها تعريف موجود في الكتلة.

AnonymousClassExample.java

 interface Score { int run = 321; void getScore(); } public class AnonymousClassExample { public static void main(String[] args) { // Myclass is hidden inner class of Score interface // whose name is not written but an object to it // is created. Score s = new Score() { @Override public void getScore() { //prints score System.out.print('Score is '+run); } }; s.getScore(); } } 

انتاج:

 Score is 321 

توفر Java أيضًا نوعًا آخر من فئات Java يُعرف باسم فئة المجمع. دعونا نناقش الأمر بالتفصيل.

فئة المجمع

في جافا، المصطلح فئة المجمع يمثل مجموعة من فئات Java التي تحدد النوع البدائي لـ Java. وهذا يعني أنه يوجد لكل نوع بدائي فئة مجمعة مقابلة. تُستخدم فئات الغلاف لإجراء التحويل من نوع بدائي إلى كائن والعكس صحيح. يوضح الشكل التالي التسلسل الهرمي لفئة المجمع.

أنواع الفئات في جافا

يمثل الجدول التالي النوع البدائي وفئة المجمع المقابلة.

النوع البدائي فئة المجمع
منطقية منطقية
كثافة العمليات عدد صحيح
شار شخصية
مزدوج مزدوج
يطفو يطفو
طويل طويل
بايت بايت
قصير قصير

دعونا نفهم فئة المجمع من خلال برنامج Java.

WrapperClassExample.java

 public class WrapperClassExample { public static void main(String args[]) { byte x = 0; //wrapping byte primitive type into Byte object Byte byteobj = new Byte(x); int y = 23; //wrapping int primitive type into Integer object Integer intobj = new Integer(y); char c='m'; //wrapping char primitive type into Character object Character charobj=c; //printing values from objects System.out.println('Byte object byteobj: ' + byteobj); System.out.println('Integer object intobj: ' + intobj); System.out.println('Character object charobj: ' + charobj); } } 

انتاج:

 Byte object byteobj: 0 Integer object intobj: 23 Character object charobj: m