Héritage et polymorphisme en Java
1. Introduction
Héritage et polymorphisme - c'est un concept très important en Java. Vous devez les comprendre mieux si vous souhaitez apprendre java.
2. Classe, Contructor et instance
Vous devriez comprendre explicitement la classe, le constructeur (constructor) et l'instance avant de commencer à apprendre l'héritage dans java. Nous considérons la classe de Person décrit une personne avec des informations sur le nom complet, l'année de naissance, lieu de naissance.
Person.java
package org.o7planning.tutorial.inheritance.basic;
public class Person {
// Nom de champ- nom de personne.
private String name;
// Champ bornYear - l'année de naissance
private Integer bornYear;
// Champ placeOfBirth - lieu de naissance.
private String placeOfBirth;
// Constructeur comprend trois paramètres.
// L'objectif est d'attribuer des valeurs aux champs de Personne.
// Indiquer le nom, l'année de naissance, le lieu de naissance d'une personne.
public Person(String name, Integer bornYear, String placeOfBirth) {
this.name = name;
this.bornYear = bornYear;
this.placeOfBirth = placeOfBirth;
}
// Constructeur comprend deux paramètres
// L'objectif est d'attribuer des valeurs aux deux champs de nom et l'année de naissance pour la Personne
// Le lieu de naissance n'est pas assigné.
public Person(String name, Integer bornYear) {
this.name = name;
this.bornYear = bornYear;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getBornYear() {
return bornYear;
}
public void setBornYear(Integer bornYear) {
this.bornYear = bornYear;
}
public String getPlaceOfBirth() {
return placeOfBirth;
}
public void setPlaceOfBirth(String placeOfBirth) {
this.placeOfBirth = placeOfBirth;
}
}
PersonDemo.java
package org.o7planning.tutorial.inheritance.basic;
public class PersonDemo {
public static void main(String[] args) {
// Instance: Thomas Edison.
Person edison = new Person("Thomas Edison", 1847);
System.out.println("Info:");
System.out.println("Name: " + edison.getName());
System.out.println("Born Year: " + edison.getBornYear());
System.out.println("Place Of Birth: " + edison.getPlaceOfBirth() );
//
// Instance: Bill Gates
Person billGates = new Person("Bill Gate", 1955, "Seattle, Washington");
System.out.println("Info:");
System.out.println("Name: " + billGates.getName());
System.out.println("Born Year: " + billGates.getBornYear());
System.out.println("Place Of Birth: " + billGates.getPlaceOfBirth());
}
}
Distinguer laclasse, le constructeur et l'instance :
Personne simule une classe de personnes, c'est quelque chose abstraite mais elle a des informations, dans l'exemple ci-dessus, qui sont le nom, l'année de naissance, le lieu de naissance.
Constructeur
Constructeur
- Constructeur adopte toujours le même nom que la classe
- Une classe contient un ou plusieurs constituants
- Constructeur avec ou sans paramètres, le constructeur qui n'a pas de paramètre est appelé constructeur par défaut.
- Constructeur est le moyen de créer un objet de la classe.
Donc la classe Person (Décrit la classe personne) est quelque chose abstraite, mais lorsqu'elle est spécifié pour vous ou moi, c'est deux objets (instance) de la classe Person. Et les constructeurs sont des méthodes particulières pour créer des objets, des composants seront assignés des valeurs aux champs (field) de la classe pour l'objet ..
Voyez l'illustration, initialisez l'objet (instance) de Constructor.
3. Héritage en java
Nous avons besoin de quelques classes qui participent à des exemples.
- Animal: Classe simule un animal.
- Canard: Classe simule un canard, est une sous-classe de Animal.
- Chat: Classe simule un chat, est une sous-classe de Anima
- Souris: Classe simule un souris, est une sous-classe de Animal.
Ici, nous avons la classe Animal, avec une méthode sans contenu.
La classe Animal contient au moins une méthode abstraite et elle doit être déclarée comme abstraite. La classe abstraite a un constructeur mais vous ne pouvez pas créer des instances via ce constructeur.
- public abstract String getAnimalName();
La classe Animal contient au moins une méthode abstraite et elle doit être déclarée comme abstraite. La classe abstraite a un constructeur mais vous ne pouvez pas créer des instances via ce constructeur.
- En substance, si vous voulez créer un objet d'animal, vous devriez créer à partir d'une espèce animale spécifique, dans ce cas, vous devez initialiser à partir du constructeur de Cat, de Mouse ou de Duck.
Animal.java
package org.o7planning.tutorial.inheritance.animal;
// La classe comprend au moins une méthode abstraite qui doit être déclarée abstraite.
public abstract class Animal {
// Le nom, par exemple, Tom Chat, Jerry Souris..
private String name;
// Constructeur par défaut.
public Animal() {
// Assigner la valeur par défaut pour le 'name'
this.name = this.getAnimalName();
}
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// C'est une méthode abstraite.
// Renvoyer le nom de cet animal.
// Le contenu spécifique de cette méthode sera mise en œuvre (implemented) dans la sous-classe.
public abstract String getAnimalName();
}
Ensuite, observez la classe Cat, hérité de Animal.
Cat possède également son constructeur et a également ses champs. Dans la première ligne du constructeur, il faut toujours appeler super(..), signifie que l'appel au constructeur de la classe mère, pour initialiser la valeur aux champs de la classe mère.
Si vous n'appelez pas super(..), Java insère automatiquement super(..) en première ligne du constructeur au moment de la compilation.
Si vous n'appelez pas super(..), Java insère automatiquement super(..) en première ligne du constructeur au moment de la compilation.
Cat.java
package org.o7planning.tutorial.inheritance.animal;
public class Cat extends Animal {
private int age;
private int height;
public Cat(int age, int height) {
// Appeler le Constructeur par défaut de la classe mère (Animal).
// Afin d'assigner des valeurs aux champs de superclasse.
super();
// Ensuite, assigner des valeurs à ses champs (field).
this.age = age;
this.height = height;
}
public Cat(String name, int age, int height) {
// Appeler le Constructeur par défaut de la classe mère (Animal).
// Afin d'assigner des valeurs aux champs de superclasse.
super(name);
// Puis, assigner des valeurs à ses champs (field).
this.age = age;
this.height = height;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
// Implémenter (implement) la méthode abstraite déclarée dans la classe mère.
@Override
public String getAnimalName() {
return "Cat";
}
}
Lorsque vous créez un objet Cat, qu'est-ce qui se passe?
Voyez la classe de la Mouse, sous classe de Animal.
Mouse.java
package org.o7planning.tutorial.inheritance.animal;
public class Mouse extends Animal {
private int weight;
// Constructeur par défaut .
public Mouse() {
// Gọi tới cấu tử Mouse(int)
// Call to constructor Mouse(int)
this(100);
}
// Constructeur a un paramètre.
public Mouse(int weight) {
// Si vous n'appelez pas de super(...).
// Java appellera un super() par défaut.
// super();
this.weight = weight;
}
// Constructeur a deux paramètres.
public Mouse(String name, int weight) {
super(name);
this.weight = weight;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
@Override
public String getAnimalName() {
return "Mouse";
}
}
InstanceofDemo.java
package org.o7planning.tutorial.inheritance.demo;
import org.o7planning.tutorial.inheritance.animal.Animal;
import org.o7planning.tutorial.inheritance.animal.Cat;
import org.o7planning.tutorial.inheritance.animal.Mouse;
public class InstanceofDemo {
public static void main(String[] args) {
// Créer un objet animal.
// L'objet animal est une classe abstraite,
// vous ne pouvez pas créer un objet de Constructeur de Animal.
Animal tom = new Cat("Tom", 3, 20);
System.out.println("name: " + tom.getName());
System.out.println("animalName: " + tom.getAnimalName());
// Utiliser l’opérateur « instanceof » pour vérifier
// si un objet est une instance d'une classe spécifique.
boolean isMouse = tom instanceof Mouse;
System.out.println("Tom is mouse? " + isMouse);
boolean isCat = tom instanceof Cat;
System.out.println("Tom is cat? " + isCat);
boolean isAnimal = tom instanceof Animal;
System.out.println("Tom is animal? " + isAnimal);
}
}
Les résultats de l'exécution d'exemple :
name: Tom
animalName: Cat
Tom is mouse? false
Tom is cat? true
Tom is animal? true
InheritMethodDemo.java
package org.o7planning.tutorial.inheritance.demo;
import org.o7planning.tutorial.inheritance.animal.Cat;
public class InheritMethodDemo {
public static void main(String[] args) {
// Créer une instance de Cat.
Cat tom = new Cat("Tom", 3, 20);
// Appeler les méthodes héritées de la classe mère (Animal).
System.out.println("name: " + tom.getName());
System.out.println("animalName: " + tom.getAnimalName());
System.out.println("-----------------");
//
// Appeler les méthodes déclarées dans la classe Cat.
System.out.println("Age: " + tom.getAge());
System.out.println("Height: " + tom.getHeight());
}
}
Les résultats de l'exécution d'exemple :
name: Tom
animalName: Cat
-----------------
Age: 3
Height: 20
Casting en Java
CastDemo.java
package org.o7planning.tutorial.inheritance.demo;
import java.util.Random;
import org.o7planning.tutorial.inheritance.animal.Animal;
import org.o7planning.tutorial.inheritance.animal.Cat;
import org.o7planning.tutorial.inheritance.animal.Mouse;
public class CastDemo {
// Cette méthode renvoie un animal aléatoire.
public static Animal getRandomAnimal() {
// Renvoie une valeur aléatoire 0 ou 1.
int random = new Random().nextInt(2);
Animal animal = null;
if (random == 0) {
animal = new Cat("Tom", 3, 20);
} else {
animal = new Mouse("Jerry", 5);
}
return animal;
}
public static void main(String[] args) {
Animal animal = getRandomAnimal();
if (animal instanceof Cat) {
// Presse le type (cast) au type Cat
Cat cat = (Cat) animal;
// Et appèlle une méthode de la classe Cat.
System.out.println("Cat height: " + cat.getHeight());
} else if (animal instanceof Mouse) {
// Presse le type (cast) au type Mouse.
Mouse mouse = (Mouse) animal;
// Et appèlle une méthode de la classe Mouse.
System.out.println("Mouse weight: " + mouse.getWeight());
}
}
}
4. Polymorphisme en Java
Vous avez un chat originaire d'Asie (AsianCat), on peut l'appeler c'est un chat (Cat) ou dire que c'est un animal (Animal) qui est rend du polymorphisme.
Sur votre CV, il est écrit que vous êtes asiatique, alors que vous êtes vietnamien.
L'exemple ci-dessous vous montre comment comporter entre la déclaration et la réalité
Sur votre CV, il est écrit que vous êtes asiatique, alors que vous êtes vietnamien.
L'exemple ci-dessous vous montre comment comporter entre la déclaration et la réalité
La classe AsianCat est une classe héritée de la classe Cat.
AsianCat.java
package org.o7planning.tutorial.inheritance.animal;
public class AsianCat extends Cat {
public AsianCat(String name, int age, int height) {
super(name, age, height);
}
// Redéfinir (override) la méthode de la classe mère (Cat)
@Override
public String getAnimalName() {
return "Asian Cat";
}
}
Le polymorphisme de Java est expliqué dans l'illustration ci-dessous :
PolymorphismDemo.java
package org.o7planning.tutorial.polymorphism;
import org.o7planning.tutorial.inheritance.animal.AsianCat;
import org.o7planning.tutorial.inheritance.animal.Cat;
public class PolymorphismDemo {
public static void main(String[] args) {
Cat cat1 = new Cat("Tom", 3, 20);
Cat cat2 = new AsianCat("ATom", 2, 19);
System.out.println("Animal Name of cat1: " + cat1.getAnimalName());
System.out.println("Animal Name of cat2: " + cat2.getAnimalName());
}
}
Les résultats de l'exécution d'exemple :
Animal Name of cat1: Cat
Animal Name of cat2: Asian Cat
Java Basic
- Personnaliser le compilateur Java pour traiter votre annotation (Annotation Processing Tool)
- Programmation Java pour l'équipe utilisant Eclipse et SVN
- Le Tutoriel de Java WeakReference
- Le Tutoriel de Java PhantomReference
- Tutoriel sur la compression et la décompression Java
- Configuration d'Eclipse pour utiliser le JDK au lieu de JRE
- Méthodes Java String.format() et printf()
- Syntaxe et nouvelles fonctionnalités de Java 8
- Expression régulière en Java
- Tutoriel de programmation Java multithreading
- Bibliothèques de pilotes JDBC pour différents types de bases de données en Java
- Tutoriel Java JDBC
- Obtenir des valeurs de colonne automatiquement incrémentées lors de l'insertion d'un enregistrement à l'aide de JDBC
- Le Tutoriel de Java Stream
- Le Tutoriel de Java Functional Interface
- Introduction à Raspberry Pi
- Le Tutoriel de Java Predicate
- Classe abstraite et interface en Java
- Modificateurs d'accès en Java
- Le Tutoriel de Java Enum
- Le Tutoriel de Java Annotation
- Comparer et trier en Java
- Le Tutoriel de Java String, StringBuffer et StringBuilder
- Tutoriel de gestion des exceptions Java
- Le Tutoriel de Java Generics
- Manipulation de fichiers et de répertoires en Java
- Le Tutoriel de Java BiPredicate
- Le Tutoriel de Java Consumer
- Le Tutoriel de Java BiConsumer
- Qu'est-ce qui est nécessaire pour commencer avec Java?
- L'histoire de Java et la différence entre Oracle JDK et OpenJDK
- Installer Java sur Windows
- Installer Java sur Ubuntu
- Installer OpenJDK sur Ubuntu
- Installer Eclipse
- Installer Eclipse sur Ubuntu
- Le Tutoriel Java pour débutant
- Histoire des bits et des bytes en informatique
- Types de données dans Java
- Opérations sur les bits
- Le Tutoriel de instruction Java If else
- Le Tutoriel de instruction Java Switch
- Les Boucles en Java
- Les Tableaux (Array) en Java
- JDK Javadoc au format CHM
- Héritage et polymorphisme en Java
- Le Tutoriel de Java Function
- Le Tutoriel de Java BiFunction
- Exemple de Java encoding et decoding utilisant Apache Base64
- Le Tutoriel de Java Reflection
- Invocation de méthode à distance en Java
- Le Tutoriel de Java Socket
- Quelle plate-forme devez-vous choisir pour développer des applications de bureau Java?
- Le Tutoriel de Java Commons IO
- Le Tutoriel de Java Commons Email
- Le Tutoriel de Java Commons Logging
- Comprendre Java System.identityHashCode, Object.hashCode et Object.equals
- Le Tutoriel de Java SoftReference
- Le Tutoriel de Java Supplier
- Programmation orientée aspect Java avec AspectJ (AOP)
Show More
- Tutoriels de programmation Java Servlet/JSP
- Tutoriels de Java Collections Framework
- Tutoriels Java API pour HTML & XML
- Tutoriels Java IO
- Tutoriels Java Date Time
- Tutoriels Spring Boot
- Tutoriels Maven
- Tutoriels Gradle
- Tutoriels Java Web Service
- Tutoriels de programmation Java SWT
- Tutoriels de JavaFX
- Tutoriels Java Oracle ADF
- Tutoriels Struts2
- Tutoriels Spring Cloud