Étude Java: couverture de la méthode des notes et polymorphisme

Revoir la surcharge de méthode

Dans une classe, si les fonctions sont similaires, il est recommandé de définir le même nom,
afin que le code soit beau et facile à programmer.

Quelles conditions peuvent constituer une surcharge de méthode?

  • Dans la même classe
  • Les noms de méthode sont les mêmes
  • Différentes listes de paramètres (nombre, ordre, type)

Remplacement de méthode

Une fois que la sous-classe a hérité de la classe parente, lorsque la méthode héritée ne peut pas répondre aux besoins commerciaux de la sous-classe actuelle, la
sous - classe a le droit de réécrire cette méthode et il est nécessaire de "remplacer la méthode".

La couverture des méthodes est également appelée: remplacement de méthode (Override Overwrite)

Lorsque nous écrivons du code, comment forme-t-il la couverture des méthodes au niveau du code?

  1. Les deux classes doivent avoir une relation d'héritage.
  2. La méthode réécrite a le même type de valeur de retour, le même nom de méthode et la même liste de paramètres formels que la méthode précédente
  3. L'autorisation d'accès ne peut pas être inférieure, mais peut être supérieure (pour la couverture de méthode dans la sous-classe, l'autorisation d'accès doit être supérieure ou égale à la méthode correspondante dans la classe parent; rappelez-vous d'abord)
  4. La méthode réécrite ne peut pas lever plus d'exceptions que la méthode précédente, elle peut être moins (rappelez-vous d'abord)

Questions nécessitant une attention:

  • La couverture des méthodes ne concerne que les méthodes et n'a rien à voir avec les attributs
  • Les méthodes privées ne peuvent pas être remplacées
  • Les constructeurs ne peuvent pas être hérités, donc les constructeurs ne peuvent pas être remplacés
  • La couverture des méthodes ne concerne que les méthodes d'instance, la «couverture des méthodes statiques» n'a pas de sens.

Exemple de code:

class Animal{
	public void move(){
		System.out.println("动物在行走");
	}
}

class Cat extends Animal{
	//方法覆盖
	public void move(){
		System.out.println("猫在走猫步");
	}
	//方法重载
	public void move(int a){
		System.out.println("猫在走猫步");
	}
}

public class OverrideTest{
	public static void main(String[] args){
		Cat c = new Cat();
		c.move(3);
		c.move();
	}
}

Explication: Il n'y a pas de couverture de méthode pour les méthodes statiques

Tout d'abord, la couverture de méthode et le mécanisme de polymorphisme sont indissociables. La couverture de méthode sert le mécanisme de polymorphisme
et le polymorphisme est naturellement lié aux objets, et la mise en œuvre de méthodes statiques ne nécessite pas d'objets.
Ainsi, en général, nous dirons que la "couverture de méthode statique" n'a aucun sens , La méthode statique "n'existe pas" remplace la méthode,
donc appelez la méthode statique doit utiliser le "nom de classe". Manière, n'utilisez pas "référence". Ambiguïté causée

Exemple de code:

public class Test{
	public static void main(String[] args){
		//多态
		Pet p = new Cat();
		//静态方法和对象无关,只和类相关
		//虽然静态方法可以使用"引用."的方式调用,但是实际运行时还是Pet.doSome();
		p.doSome();
		
		Pet.doSome();
		Cat.doSome();
	}			
}

class Pet {
	static public void doSome() {
		System.out.println("Pet类的doSome方法执行");
	}
}

class Cat extends Pet{
	static public void doSome() {
		System.out.println("Cat类的doSome方法执行");
	}
}

Explication: les méthodes privées ne peuvent pas être écrasées (rappelez-vous)

Exemple de code:

public class OverrideTest{
	
	//私有方法
	private void doSome(){
		System.out.println("OverrideTest类的私有方法执行");
	}
	public static void main(String[] args){
		OverrideTest ot = new T();
		ot.doSome();
	}
}

class T extends OverrideTest{
	// 尝试重写父类中的doSome()
	// 子类方法访问权限不能更低,可以更高
	public void doSome(){
		System.out.println("T类的方法执行");
	}
}

Explication: À propos du type de valeur de retour dans la substitution de méthode

Le type de valeur de retour "réduit" dans la couverture de méthode de sous-type est grammaticalement autorisé,
mais la couverture de méthode utilisée dans le développement réel consiste à copier et coller directement la méthode dans le type parent, et elle ne change pas, donc la signification réelle de cette syntaxe n'est pas Grand

Exemple de code:

public class Test{
	public static void main(String[] args){
		
		Pet p = new Cat();
		p.doSome();
	}			
}
class Pet {
	public Pet doSome() {
		System.out.println("Pet类的doSome方法执行");
		return null;
	}
}

class Cat extends Pet{
	public Cat Pet doSome(){
		System.out.println("Cat类的doSome方法执行");
		return null;
	}
}

Je suppose que tu aimes

Origine www.cnblogs.com/zy200128/p/12682806.html
conseillé
Classement