Latest web development tutorials

فئات مجردة جافا

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

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

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

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


فئة مجردة

نستعمله لتعريف فئة مجردة فئة مجردة في لغة جافا. الأمثلة التالية:

/* 文件名 : Employee.java */
public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   public Employee(String name, String address, int number)
   {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   public double computePay()
   {
     System.out.println("Inside Employee computePay");
     return 0.0;
   }
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + this.name
       + " " + this.address);
   }
   public String toString()
   {
      return name + " " + address + " " + number;
   }
   public String getName()
   {
      return name;
   }
   public String getAddress()
   {
      return address;
   }
   public void setAddress(String newAddress)
   {
      address = newAddress;
   }
   public int getNumber()
   {
     return number;
   }
}

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

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      /* 以下是不允许的,会引发错误 */
      Employee e = new Employee("George W.", "Houston, TX", 43);

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

عند محاولة ترجمة الطبقة AbstractDemo، فإنه سوف ينتج الخطأ التالي:

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

الميراث الطبقة مجردة

نهجنا العام التي ورثها فئة الموظف:

/* 文件名 : Salary.java */
public class Salary extends Employee
{
   private double salary; //Annual salary
   public Salary(String name, String address, int number, double
      salary)
   {
       super(name, address, number);
       setSalary(salary);
   }
   public void mailCheck()
   {
       System.out.println("Within mailCheck of Salary class ");
       System.out.println("Mailing check to " + getName()
       + " with salary " + salary);
   }
   public double getSalary()
   {
       return salary;
   }
   public void setSalary(double newSalary)
   {
       if(newSalary >= 0.0)
       {
          salary = newSalary;
       }
   }
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}

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

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);

      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

يتم تصنيف البرنامج أعلاه النتائج على النحو التالي:

Constructing an Employee
Constructing an Employee
Call mailCheck using  Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--
Within mailCheck of Salary class
Mailing check to John Adams with salary 2400.

طريقة مجردة

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

وبالمثل الكلمة مجردة يمكن استخدامها ليعلن أساليب مجردة، وأساليب مجردة تحتوي فقط على اسم الأسلوب، وليس الجسم الأسلوب.

لم يتم تعريف الأسلوب التجريدي، مباشرة وراء اسم الأسلوب بفاصلة منقوطة بدلا من الأقواس المعقوفة.

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

أعلن أساليب مجردة سيؤدي إلى نتائج التاليين:

  • إذا فئة يحتوي على أساليب مجردة، ويجب أن تكون الطبقة مجردة.
  • أي فئة فرعية يجب تجاوز أساليب مجردة من الفئة الأصل، أو أن تعلن نفسها مجردة.

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

إذا كانت الدرجة الراتب يرث فئة الموظف، فإنه يجب تنفيذ computePay طريقة ():

/* 文件名 : Salary.java */
public class Salary extends Employee
{
   private double salary; // Annual salary
  
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }

   //其余代码
}