Table des matières:
Vidéo: 10 questions clés pour son projet d’application mobile - #ECOMGUEST - Market Academy & Synertic 2025
Si une classe Java n'est pas cassée, ne le réparez pas. Supposons que vous souhaitiez ajouter des fonctionnalités à une classe Java existante. Vous aimez la classe d'activité d'Android, mais la classe d'activité pré-déclarée n'affiche rien à l'écran. Réécrivez-vous la classe d'activité d'Android? Non.
Au lieu de réécrire une classe existante, vous étendez la classe. Même dans une application "Hello" Android, vous écrivez
public class MyActivity extends Activity
Ensuite, dans la déclaration de la classe MyActivity, vous écrivez
@Overide public void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R.. layout. main);}
Votre classe MyActivity crée de nouvelles fonctionnalités en étendant la plupart des fonctionnalités d'Android tout en remplaçant la méthode brain-dead onCreate de la classe Activity.
Les classes finales de Java
En programmation orientée objet, étendre une classe est la chose la plus noble que vous pouvez faire.
Mais certaines classes ne sont pas destinées à être étendues. Prenez, par exemple, la classe String de Java. Une chaîne est une chaîne est une chaîne. Vous ne voulez pas MyString de quelqu'un. méthode length pour renvoyer la durée nécessaire pour brouiller les caractères d'une chaîne. Pour empêcher quelqu'un de faire quelque chose d'inattendu, non conventionnel ou inhabituel avec les méthodes d'une chaîne, les créateurs de Java ont rendu la classe String finale:
public final class String
Certaines classes pré-déclarées d'Android sont également définitives, y compris Téléphonie et classes MediaStore.
Les classes abstraites de Java
Tout comme une classe finale déteste être étendue, une classe abstraite insiste pour être étendue. ViewGroup d'Android est un exemple de classe abstraite.
public résumé class ViewGroup {public void bringChildToFront (Afficher l'enfant) {int index = indexOfChild (child); if (index> = 0) {removeFromArray (index); addInArray (enfant, mChildrenCount); enfant. mParent = this;}} protected abstract void onLayout (booléen modifié, int l, int int, int r, int b);}
ViewGroup d'Android. Le fichier java fait plus de 3 700 lignes. Donc, cet exemple n'a qu'une infime partie du code du fichier. Mais vous pouvez voir comment une classe devient abstraite. À la surprise de personne, le mot abstrait précède le mot classe. Mais le mot abstrait commence aussi la déclaration de certaines méthodes appartenant à la classe.
Les fondateurs d'Android ont décidé que l'idée d'un ViewGroup est utile. Ils étaient corrects car vos dispositions Android préférées (LinearLayout, RelativeLayout, etc.) sont des sous-classes de ViewGroup.Ils ont également compris que d'une sorte de ViewGroup à l'autre, certaines fonctionnalités ne changeaient pas. Par exemple, l'exemple ci-dessus définit une méthode bringChildToFront et les sous-classes de ViewGroup héritent de cette méthode.
Mais les fondateurs ont aussi réalisé que certains aspects d'un ViewGroup n'avaient aucun sens à moins de travailler avec un type de groupe particulier. Par exemple, un LinearLayout positionne les choses l'une après l'autre, et un RelativeLayout positionne les choses au-dessus, en dessous et les unes des autres. Donc, le code ci-dessus n'a pas de méthode onLayout complète.
La déclaration onLayout n'a pas de corps de méthode. Mais Android exige que chaque sous-classe de la classe ViewGroup déclare sa propre méthode onLayout. Java applique cette exigence lorsque vous déclarez la méthode onLayout comme étant abstraite.
En tant que développeur, vous ne pouvez pas créer un objet à partir d'une classe abstraite. Si vous écrivez
ViewGroup group = new ViewGroup ();
Java vous dit que vous vous comportez mal. Pour faire quelque chose d'utile avec la classe ViewGroup, vous avez besoin d'une sous-classe de la classe ViewGroup. La sous-classe a une version concrète de chaque méthode abstraite dans la classe ViewGroup:
package com. allmycode. des échantillons; importer Android. contenu. Le contexte; importer Android. vue. ViewGroup; Classe publique MyLayout extends ViewGroup {public MyLayout (contexte de contexte) {super (contexte);} @Override protected void onLayout (booléen modifié, int l, int int, int r, int b);}}
