سؤال

يمكن أن فئة مجردة يكون منشئ ؟

إذا كان الأمر كذلك ، كيف يمكن أن تستخدم لأغراض ما?

هل كانت مفيدة؟

المحلول

نعم، فئة مجردة يمكن أن يكون منشئ. النظر في هذا:

abstract class Product { 
    int multiplyBy;
    public Product( int multiplyBy ) {
        this.multiplyBy = multiplyBy;
    }

    public int mutiply(int val) {
       return multiplyBy * val;
    }
}

class TimesTwo extends Product {
    public TimesTwo() {
        super(2);
    }
}

class TimesWhat extends Product {
    public TimesWhat(int what) {
        super(what);
    }
}

ووProduct الفائقة غير مجردة ويحتوي على منشئ. وTimesTwo الطبقة ملموسة لديه منشئ hardcodes فقط قيمة 2. TimesWhat الطبقة ملموسة لديه منشئ التي تسمح للطالب لتحديد القيمة.

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

<اقتباس فقرة>   

ملحوظة: بما أنه لا يوجد الافتراضي (أو عدم وسيطة) منشئ في الأصل   فئة مجردة، منشئ المستخدمة في فئة فرعية يجب استدعاء صراحة   منشئ الأم.

نصائح أخرى

كنت تعرف منشئ في فئة مجردة إذا كنت في واحدة من هذه الحالات:

  • كنت ترغب في إجراء بعض التهيئة (إلى حقول فئة مجردة) قبل إنشاء مثيل فئة فرعية في الواقع يقام
  • كنت قد حددت النهائي الحقول في فئة مجردة ولكن لم تهيئة لهم في الإعلان نفسه ؛ في هذه الحالة, يجب أن يكون لديك منشئ تهيئة هذه الحقول

نلاحظ أن:

  • يمكنك تحديد أكثر من واحد منشئ (مع مختلف الحجج)
  • يمكنك ( ؟ ) تحديد كل ما تبذلونه من منشئات المحمية (مما يجعلها العامة لا طائل على أي حال)
  • فرعية الخاص بك المنشئ(s) يمكن أن استدعاء منشئ واحد من الملخص الطبقة ؛ حتى أنه قد يجب أن نسميها (إذا كان هناك لا لا-arg منشئ في فئة مجردة)

في أي حال, لا ننسى أنه إذا كنت لا تعرف منشئ ، ثم المترجم سوف تولد تلقائيا واحد بالنسبة لك (هذا هو الجمهور لا حجة و لا يفعل شيئا).

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

نعم! فئات مجردة يمكن أن يكون لها صانعين!

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

عندما نقوم بإنشاء كائن من أي فئة فرعية كل المنشئات في المقابلة الميراث الشجرة الاحتجاج في أعلى إلى أسفل النهج.نفس الحالة تنطبق على فئات مجردة.على الرغم من أننا لا يمكن إنشاء كائن من فئة مجردة, عندما نقوم بإنشاء كائن من الفئة التي هو ملموسة فرعية من فئة مجردة, منشئ فئة مجردة تلقائيا الاحتجاج.وبالتالي فإننا يمكن أن يكون منشئ في فئات مجردة.

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

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

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

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

وهناك فئة مجردة يمكن أن يكون منشئ لكن لا يمكنك إنشاء كائن من فئة مجردة لذلك كيف يمكنك استخدام هذا البناء؟

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

وذلك باستخدام السوبر يمكنك تمرير القيم في منشئ فئة مجردة وبقدر ما أتذكر أنه يجب أن يكون البيان الأول في طريقة أو منشئ.

على الرغم من أن هناك العديد من إجابات جيدة ، أود أن أعطي my 2 cents.

منشئ لا بناء الكائن.هو استعملت أن تهيئة كائن.

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

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

public abstract class Abs{
    int i;
    int j;
    public Abs(int i,int j){
        this.i = i;
        this.j = j;
        System.out.println(i+" "+j);
    }
}

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

public class Imp extends Abs{

public Imp(int i, int j,int k, int l){
    System.out.println("2 arg");
}
}

لديك لاستخدام مثل أدناه على سبيل المثال:

public class Imp extends Abs{

public Imp(int i, int j,int k, int l){
    super(i,j);
    System.out.println("2 arg");
}
}

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

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

والمرجعي: هذا المقالة

والنظر في هذا:

abstract class Product { 
    int value;
    public Product( int val ) {
        value= val;
    }
    abstract public int multiply();
}

class TimesTwo extends Product {
    public int mutiply() {
       return value * 2;
    }
}

ووالمتفوقة هي مجردة، ولها المنشئ.

في فئة محددة, إعلان منشئ الخرسانة نوع Fnord بشكل فعال يكشف عن أمرين:

  • وسيلة رمز طلب إنشاء مثيل من Fnord

  • وسيلة مثيل من نوع المستمدة من Fnord الذي هو قيد الإنشاء يمكن طلب أن كل قاعدة الميزات من فئة يتم تهيئته.

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

ونعم هو عليه. ويسمى منشئ فئة مجردة عند إنشاء مثيل من فئة الموروثة. على سبيل المثال، ما يلي هو برنامج جافا صالح.

// An abstract class with constructor
abstract class Base {
Base() { System.out.println("Base Constructor Called"); }
abstract void fun();
    }
class Derived extends Base {
Derived() { System.out.println("Derived Constructor Called"); }
void fun() { System.out.println("Derived fun() called"); }
    }

class Main {
public static void main(String args[]) { 
   Derived d = new Derived();
    }

}

وهذا هو الناتج من التعليمات البرمجية أعلاه،

ومنشئ قاعدة تسمى منشئ المستمدة دعا

والمراجع: إدخال وصف الرابط هنا

وكما وصفها javafuns هنا ، وهذا مثال:

public abstract class TestEngine
{
   private String engineId;
   private String engineName;

   public TestEngine(String engineId , String engineName)
   {
     this.engineId = engineId;
     this.engineName = engineName;
   }
   //public gettors and settors
   public abstract void scheduleTest();
}


public class JavaTestEngine extends TestEngine
{

   private String typeName;

   public JavaTestEngine(String engineId , String engineName , String typeName)
   {
      super(engineId , engineName);
      this.typeName = typeName;
   }

   public void scheduleTest()
   {
     //do Stuff
   }
}

نعم, ملخص دروس يمكن أن يكون منشئات !

هنا هو مثال باستخدام منشئ في خلاصة الدرجة:

abstract class Figure { 

    double dim1;        
    double dim2; 

    Figure(double a, double b) {         
        dim1 = a;         
        dim2 = b;         
    }

    // area is now an abstract method 

   abstract double area(); 

}


class Rectangle extends Figure { 
    Rectangle(double a, double b) { 
        super(a, b); 
    } 
    // override area for rectangle 
    double area() { 
        System.out.println("Inside Area for Rectangle."); 
        return dim1 * dim2; 
    } 
}

class Triangle extends Figure { 
    Triangle(double a, double b) { 
        super(a, b); 
    } 
    // override area for right triangle 
    double area() { 
        System.out.println("Inside Area for Triangle."); 
        return dim1 * dim2 / 2; 
    } 
}

class AbstractAreas { 
    public static void main(String args[]) { 
        // Figure f = new Figure(10, 10); // illegal now 
        Rectangle r = new Rectangle(9, 5); 
        Triangle t = new Triangle(10, 8); 
        Figure figref; // this is OK, no object is created 
        figref = r; 
        System.out.println("Area is " + figref.area()); 
        figref = t; 
        System.out.println("Area is " + figref.area()); 
    } 
}

لذا أعتقد أنك حصلت على الجواب.

فئة مجردة يمكن أن يكون منشئ على الرغم من أنه لا يمكن إنشاء مثيل.ولكن المنشئ تعريف في فئة مجردة يمكن استخدامها ل إنشاء مثيل فئة محددة من فئة مجردة.تحقق JLS:

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

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

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

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

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

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

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

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

public abstract class Employee {
  private String EmpName;
  abstract double calcSalary();

  Employee(String name) {
    this.EmpName = name;// constructor of abstract class super class
  }
}

class Manager extends Employee{
 Manager(String name) {
    super(name);// setting the name in the constructor of sub class
 }
double calcSalary() {
    return 0;
 }
}

وYes..It هو مثل أي فئة أخرى. يمكن أن يكون منشئ ويسمى ذلك بعد إنشاء الكائن للفئة الأساسية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top