Latest web development tutorials

إعادة كتابة جافا (تجاوز) والحمولة الزائدة (الزائد)

كتابة (تجاوز)

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

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

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

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

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象

      a.move();// 执行 Animal 类的方法

      b.move();//执行 Dog 类的方法
   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

动物可以移动
狗可以跑和走

في المثال أعلاه يمكن أن ينظر إليه، على الرغم من ب تنتمي إلى أنواع الحيوان، وإنما هو عملية نقل الطبقة طريقة الكلب.

هذا هو لأنه في وقت الترجمة، ولكن فحص نوع مرجع المعلمة.

ومع ذلك، في وقت التشغيل، ونوع من آلة جافا الافتراضية (JVM) من الكائن المحدد وطريقة التشغيل للكائن.

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

النظر في الأمثلة التالية:

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
   public void bark(){
      System.out.println("狗可以吠叫");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象

      a.move();// 执行 Animal 类的方法
      b.move();//执行 Dog 类的方法
      b.bark();
   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

TestDog.java:30: cannot find symbol
symbol  : method bark()
location: class Animal
                b.bark();
                 ^

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


طريقة إعادة كتابة قواعد

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

باستخدام الكلمة سوبر

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

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      super.move(); // 应用super类的方法
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{

   public static void main(String args[]){

      Animal b = new Dog(); // Dog 对象
      b.move(); //执行 Dog类的方法

   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

动物可以移动
狗可以跑和走

الزائد (الزائد)

الزائد (الحمولة الزائدة) في فئة داخل الأسلوب الذي يحمل نفس الاسم، ولكن مع معلمات مختلفة. قد يكون نوع الإرجاع نفس أو مختلفة.

يجب أن يكون لكل طريقة زائد (أو منشئ) قائمة فريدة من أنواع الجدل.

الصانعين طاقتها فقط

الحمولة الزائدة قواعد

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

أمثلة

public class Overloading {
 
	public int test(){
		System.out.println("test1");
		return 1;
	}
 
	public void test(int a){
		System.out.println("test2");
	}	
 
	//以下两个参数类型顺序不同
	public String test(int a,String s){
		System.out.println("test3");
		return "returntest3";
	}	
 
	public String test(String s,int a){
		System.out.println("test4");
		return "returntest4";
	}	
 
	public static void main(String[] args){
		Overloading o = new Overloading();
		System.out.println(o.test());
		o.test(1);
		System.out.println(o.test(1,"test3"));
		System.out.println(o.test("test4",1));
	}
}

إعادة كتابة الفرق بين الحمولة الزائدة

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