Latest web development tutorials

réécriture de Java (Override) et la surcharge (surcharge)

Rewrite (Override)

Rewriting est une sous-classe du processus de mise en œuvre pour permettre l'accès aux méthodes de la classe parente de ré-écrire! les valeurs et les paramètres de retour ne sont pas modifiés. Tel est le même cas, le noyau réécrire!

Réécriture avantage de sous-classes selon les besoins, définir spécifiques dans leurs actions.

C'est une sous-classe d'une méthode de la classe parent peut être réalisé selon les besoins.

Dans les principes orientés objet, la réécriture signifie que vous pouvez remplacer toutes les méthodes existantes. Des exemples sont les suivants:

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 类的方法
   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

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

Dans l'exemple ci-dessus, on peut voir, même si b appartient à des types d'animaux, mais il est une opération de déplacement de classe méthode de chien.

En effet, au moment de la compilation, mais la vérification de type de référence paramètre.

Cependant, au moment de l'exécution, le type de la machine virtuelle Java (JVM) de l'objet et le mode de fonctionnement de l'objet spécifié.

Ainsi, dans l'exemple ci-dessus, le compilateur a été en mesure de réussir parce que la méthode de déplacement existe classe Animal, mais en cours d'exécution, en cours d'exécution est une méthode pour un objet particulier.

Prenons les exemples suivants:

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();
   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

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

Le programme jette une erreur de compilation parce qu'il n'y a pas de méthode d'écorce Type d'animaux de référence b.


La méthode de réécriture des règles

  • Liste des paramètres doit être exactement la même que la méthode pour être réécrite;
  • Le type de retour doit être complètement réécrite avec le type de la méthode de retour est le même;
  • L'accès est pas plus bas que les méthodes accès classe parent redéfinis. Par exemple: Si une classe parent est déclarée public, alors remplacer cette méthode dans une sous-classe ne peut pas être déclarée comme protégée.
  • Les membres de la classe parente ne peuvent être outrepassées ses sous-classes.
  • Déclarée méthodes finales ne peuvent pas être remplacés.
  • Déclaré que les méthodes statiques ne peuvent pas être réécrits, mais peuvent être déclarés à nouveau.
  • La classe parent et sous-classe dans le même emballage, la sous-classe peut remplacer la classe mère de toutes les méthodes, autres que les déclarations de l'approche privée et finale.
  • Sous-et superclasse est pas le même paquet, de sorte que seuls les sous-classes peuvent remplacer la déclaration des méthodes non-finales de la classe parent public et protégé pour.
  • méthode redéfinie peut jeter une exception non obligatoire, indépendamment du fait que la méthode a été réécrite lancer une exception. Cependant, la méthode ne peut pas remplacer l'exception obligatoire jeter nouvelle ou plus large que la déclaration obligatoire est méthode redéfinie exception, sinon vous pouvez.
  • Constructor ne peut pas être réécrite.
  • Si une méthode ne peut pas être héritée, il ne peut pas remplacer cette méthode.

En utilisant le mot-clé super

Lorsque vous avez besoin d'être réécrite pour appeler la méthode de la classe parent dans une sous-classe, d'utiliser le mot-clé super.

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类的方法

   }
}

Les exemples ci-dessus les résultats compilés sont les suivants:

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

Overload (surcharge)

Overload (surcharge) est dans une classe à l'intérieur de la méthode du même nom, mais avec des paramètres différents. Le type de retour peuvent être identiques ou différents.

Chaque méthode surchargée (ou constructeur) doivent avoir une liste unique de types d'arguments.

constructeurs Seulement surchargés

Surcharge règles

  • Surchargé méthode doit changer la liste des paramètres;
  • méthodes surchargées peuvent changer le type de retour;
  • méthodes surchargées peuvent changer les modificateurs d'accès;
  • méthodes surchargées peuvent déclarer une exception vérifiés nouvelle ou plus large;
  • La méthode peut être dans la même classe ou être surchargé dans une sous-classe.

Exemples

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));
	}
}

Réécrire la différence entre la surcharge

Le point de différence méthodes surchargées Redéfinition des méthodes
Liste des paramètres Vous devez être modifié Ne doit pas être modifié
Type de retour Vous pouvez modifier Ne doit pas être modifié
anormal Vous pouvez modifier Peut être réduit ou supprimé, vous ne devez pas jeter de nouveau ou plus large exception
accès Vous pouvez modifier Ne doit pas être des restrictions plus sévères (limite peut être réduite)