سؤال

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

public void setValue(){
   this.value = 0;
}
public void setValue(int v){
   this.value = v;
}

ما رأيك في هذه الطريقة ؟ فإنه لا تزال تعتبر الحمولة الزائدة منذ عودته مختلف البيانات نوع ؟

public int setValue(){
   return this.value;
}

السؤال الثاني هو:ما هو الطاغي في جافا ؟ لا تتعلق بالميراث.دعونا لدي التالية:

public class Vehicle{
  double basePrice = 20000;
  //constructor defined
  public double getPrice(){
     return basePrice;
   }
}

public class Truck extends Vehicle{
  double truckPrice = 14000;
  //constructor defined
  public double getPrice(){
     return truckPrice;
   }
}

حتى الآن دعونا نقول لدي التالية

Truck truck = new Truck();

لو اتصل

truck.super.getPrice()

هذا من شأنه أن عودة السعر من السيارة فئة 20,000

لو اتصل

truck.getPrice()

هذا من شأنه أن يعود السعر في الشاحنة فئة ، 14,000

هو المعرفة الصحيحة لكل من الأسئلة ؟

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

المحلول

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

public void setValue() {
   this.value = 0;
}

public int setValue() {
   return this.value;
}

هذا سوف تفشل تجميع.

كما روب تحديد أعتقد بأنك تقصد تجاوز, و عليك أن الصحيح.ملاحظة مع تجاوز لا يمكن تغيير نوع الإرجاع.كما جافا 5 ، يمكنك العودة نوع مشتق من قاعدة الطبقة الطريقة التي تم إرجاعها.قبل جافا 5 ، يجب أن يكون من نوع مماثل.هذا هو, لا يمكنك القيام أدناه حتى جافا 5 وما بعدها:

public class AnimalNoise {}
public class Miaw extends AnimalNoise {}

public class Animal {
    public AnimalNoise makeNoise() {
        return new AnimalNoise();
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}

ومع ذلك ، حتى في جافا 5 وما بعدها ، لا القيام بما يلي:

public class Animal {
    public String makeNoise() {
        return "silence";
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}
public class Miaw {}

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

نصائح أخرى

الصحيح ؛ الحمولة الزائدة هو تقديم توقيعات متعددة لنفس الأسلوب.

الأسمى, وهو ما أعتقد تعني "الكتابة" هو قانون توفير مختلف تنفيذ الطريقة الموروثة من النوع الأساسي و هو في الأساس نقطة من تعدد الأشكال عن طريق الميراث ، أي

public class Bicycle implements Vehicle {
    public void drive() { ... }
}

public class Motorcycle extends Bicycle {
    public void drive() {
        // Do motorcycle-specific driving here, overriding Bicycle.drive()
        // (we can still call the base method if it's useful to us here)
    }
}

ما وصفت لك هو الصحيح.

لمزيد من التوضيح نلقي نظرة على مفهوم تعدد الأشكال.ويكيبيديا لديها مقالة جيدة

http://en.wikipedia.org/wiki/Polymorphism#Computing

http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

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