1. Interface
1.1 Aperçu des interfaces
Une interface est une collection de fonctions. Elle peut aussi être considérée comme un type de données, et elle est plus abstraite qu'une classe abstraite.Class 。
Une interface décrit uniquement les méthodes qu'elle doit avoir, sans implémentation concrète. L'implémentation concrète est réalisée par la classe d'implémentation de l'interface (équivalente à une sous-classe de l'interface). Cela sépare la définition de la fonctionnalité de son implémentation, ce qui optimise la conception du programme.
1.2 Format et utilisation des interfaces
1.2.1 Format d'une interface
Contrairement à la définition d'une classe,classla différence est que, lors de la définition d'une interface, il faut utiliser le mot-cléinterface.
Le fichier dans lequel l'interface est définie est toujours un fichier.java. Bien que la déclaration utilise le mot-cléinterface, après compilation, il produit toujours un fichier.classfichier. Cela nous permet de considérer une interface comme une classe spéciale qui ne contient que des déclarations de fonctionnalités.
Format de définition :public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
1.2.2 Utilisation des interfaces
Toutes les méthodes d'une interface sont des méthodes abstraites. Utiliser directement `new` sur une interface pour appeler des méthodes n'a pas de sens, et Java ne l'autorise pas.
La relation entre une classe et une interface est une relation d'implémentation, c'est-à-dire qu'une classe implémente une interface. L'action d'implémentation est similaire à l'héritage, mais le mot-clé est différent ; l'implémentation utiliseimplements。
Après que d'autres classes (classes d'implémentation) implémentent une interface, cela équivaut à déclarer :"Je dois avoir la fonctionnalité de cette interface."La classe d'implémentation doit encore redéfinir les méthodes pour implémenter la fonctionnalité spécifique.
Format :
class 类 implements 接口 {
重写接口中方法
}
Après qu'une classe implémente une interface, la classe hérite des méthodes abstraites de l'interface. À ce stade, la classe doit redéfinir ces méthodes abstraites pour compléter la logique concrète.
1.2.3 Code du cas 1
Exemple
1.3 Caractéristiques des membres d'une interface
-
1. Les variables peuvent être définies dans une interface, mais elles doivent être modifiées avec des modificateurs fixes : `public static final`. Par conséquent, les variables dans une interface sont aussi appelées constantes, et leurs valeurs ne peuvent pas être modifiées. Nous expliquerons le mot-clé `final` plus tard.
-
2. Des méthodes peuvent être définies dans une interface, et les méthodes ont également des modificateurs fixes : `public abstract`.
-
3. Une interface ne peut pas créer d'objets.
-
4. Une sous-classe doit redéfinir toutes les méthodes abstraites de l'interface avant de pouvoir être instanciée. Sinon, la sous-classe est une classe abstraite.
1.3.1 Code d'exemple 2
Exemple
1.4 Relation entre les interfaces et les classes
- A : Entre les classes : relation d'héritage. Une classe ne peut hériter directement que d'une seule classe parente, mais prend en charge l'héritage à plusieurs niveaux.
- B : Entre les classes et les interfaces : relation d'implémentation uniquement. Une classe peut implémenter plusieurs interfaces.
- C : Entre les interfaces : relation d'héritage uniquement. Une interface peut hériter de plusieurs interfaces.
1.4.1 Exemple de code 3
Exemple
1.5 L'idée des interfaces
Précédemment, nous avons appris la représentation du code des interfaces. Maintenant, apprenons l'idée derrière les interfaces, puis expliquons avec des exemples de la vie quotidienne.
Par exemple: Nous savons tous qu'un ordinateur possède de nombreux ports, et que des périphériques correspondants peuvent y être branchés. Pourquoi ces appareils peuvent-ils être branchés ? La raison principale est que ces appareils respectaient les règles d'utilisation du port lors de leur fabrication ; sinon, ils ne pourraient pas être branchés au port, encore moins être utilisés. Il s'avère que l'existence de ces ports nous permet d'utiliser davantage d'appareils.
L'émergence des interfaces facilite l'utilisation et la maintenance ultérieures. D'un côté, on utilise l'interface (comme un ordinateur), et de l'autre, on implémente l'interface (les appareils branchés sur le port). Par exemple, un ordinateur portable utilise cette règle (interface), et les périphériques d'ordinateur implémentent cette règle (interface).
Les interfaces sont largement utilisées dans le framework des collections :
Collection 接口
List 接口
ArrayList 实现类
LinkedList 实现类
Set 接口
1.6 Avantages des interfaces
- 1. La relation entre une classe et une interface est une implémentation, et il s'agit d'une implémentation multiple. Une classe peut implémenter plusieurs interfaces. La relation entre les classes est l'héritage. L'héritage en Java est un héritage simple ; une classe ne peut avoir qu'une seule classe parente. Cela lève la limitation de l'héritage.
- 2. Fournir des règles au monde extérieur (interface USB).
- 3. Réduire le couplage du programme (il permet le développement modulaire ; une fois les règles définies, chacun implémente son propre module, ce qui améliore l'efficacité du développement).
1.7 Différences entre les interfaces et les classes abstraites
1. Points communs :Toutes deux extraient continuellement des méthodes qui sont abstraites et sans implémentation concrète, et aucune des deux ne peut être instanciée (on ne peut pas créer d'objets).
2. Différences
1 : Relation avec les classes
(1) La relation entre une classe et une interface est une implémentation, et il s'agit d'une implémentation multiple ; une classe peut implémenter plusieurs interfaces. La relation entre une classe et une classe abstraite est l'héritage. L'héritage en Java est un héritage simple et un héritage à plusieurs niveaux ; une classe ne peut hériter que d'une seule classe parente, mais elle peut avoir une classe grand-parent.
(2) Différence 2 : Membres
a.成员变量 抽象类可以有成员变量,也可以有常量 接口只能有常量,默认修饰符public static final b.成员方法 抽象类可以有抽象方法,也可以有非抽象方法 接口只能有抽象方法,默认修饰符 public abstract c.构造方法 抽象类有构造方法,为子类提供 接口没有构造方法
1.8 Étude de cas : athlète

1.8.1 Code du cas 4
Exemple
2. Polymorphisme
2.1 Aperçu du polymorphisme
Le polymorphisme est la troisième caractéristique majeure de la programmation orientée objet, après l'encapsulation et l'héritage.
Dans le monde réel, les choses présentent souvent plusieurs formes. Par exemple, un étudiant est un type de personne. Un étudiant spécifique, Zhang San, est à la fois un étudiant et une personne, présentant ainsi deux formes.
Java, en tant que langage orienté objet, peut également décrire plusieurs formes d'une même chose. Par exemple, si la classe Student hérite de la classe Person, alors un objet Student est à la fois un Student et un Person.
2.2 Définition et format d'utilisation du polymorphisme
Le format de définition du polymorphisme : en fait, il s'agit d'une variable de référence de la classe parente qui pointe vers un objet de la classe enfant.
父类类型 变量名 = new 子类类型(); 变量名.方法名();
A : Format pour le polymorphisme avec des classes ordinaires
父类 变量名 = new 子类();
Comme :
class Fu {}
class Zi extends Fu {}
//类的多态使用
Fu f = new Zi();
B : Format pour le polymorphisme avec des classes abstraites
抽象类 变量名 = new 抽象类子类();
Comme :
abstract class Fu {
public abstract void method();
}
class Zi extends Fu {
public void method(){
System.out.println(“重写父类抽象方法”);
}
}
//类的多态使用
Fu fu= new Zi();
C : Format pour le polymorphisme avec des interfaces
接口 变量名 = new 接口实现类();
Comme :
interface Fu {
public abstract void method();
}
class Zi implements Fu {
public void method(){
System.out.println(“重写接口抽象方法”);
}
}
//接口的多态使用
Fu fu = new Zi();
2.2.1 Code du cas
Exemple
2.3 Caractéristiques des membres polymorphes
A : Variables membres polymorphes
Lorsqu'une variable membre portant le même nom apparaît à la fois dans la classe parente et dans la classe enfant, et que le polymorphisme appelle cette variable :
- Au moment de la compilation : il vérifie si la classe à laquelle appartient la variable de référence contient la variable membre appelée. Si ce n'est pas le cas, la compilation échoue.
- À l'exécution : il appelle également la variable membre de la classe à laquelle appartient la variable de référence.
Moyen mnémotechnique simple : la compilation et l'exécution font toutes deux référence au côté gauche du signe égal. La compilation et l'exécution regardent toutes les deux à gauche.
B : Méthodes membres polymorphes
- Au moment de la compilation : on se réfère à la classe à laquelle appartient la variable de référence ; si la classe ne possède pas la méthode appelée, la compilation échoue.
- À l'exécution : se référer à la classe à laquelle appartient l'objet pointé par la variable de référence, et exécuter la méthode membre de la classe à laquelle appartient l'objet.
En bref : la compilation regarde à gauche, l'exécution regarde à droite.
2.3.1 Cas de code six
Exemple
2.4 Upcasting et Downcasting dans le polymorphisme
Le transtypage dans le polymorphisme est divisé en deux types : upcasting et downcasting :
A : Upcasting : lorsqu'un objet de sous-classe est affecté à une référence de classe parente, il s'agit d'un upcasting. Le polymorphisme lui-même est le processus d'upcasting.
Format d'utilisation :
父类类型 变量名 = new 子类类型();
Par exemple :
Person p = new Student();
B : Downcasting : un objet de sous-classe qui a déjà subi un upcasting peut utiliser le format de conversion de type forcée pour convertir une référence de classe parente en une référence de sous-classe. Ce processus est le downcasting. Si un objet de classe parente est créé directement, il ne peut pas subir de downcasting.
Format d'utilisation :
Subclass type variable name = (Subclass type) Parent class type variable;
Par exemple :
Student stu = (Student) p; // 变量p 实际上指向 Student 对象
Exemple
2.5 Avantages et inconvénients du polymorphisme
Exemple
Adresse d'origine : https://www.cnblogs.com/yoke/p/7453864.html