Héritage et polymorphisme en Java

View more categories:

1- Introduction

Héritage et polymorphisme - c'est un concept très important en Java. Vous devez le mieux comprendre si vous souhaitez apprendre java.

2- Classe, Contructor et instance(Class, Constructor, instance)

Vous devez comprendre explicitement la classe, le constructeur (constructeur) et l'instance avant de commencer à rechercher l'héritage dans java. Nous considérons la classe de  Person, décrit une personne avec l'information sur le nom, 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;

	// Constructor dispose de trois paramètres.
	// L'objectif est d'attribuer des valeurs aux champs de Personne.
	// Indiquez 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;
	}

	// Constructor dispose de 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());

	}

}

Distinguez de classe, constituants (constructeur) et objet:

La personne simule  une classe de personnes, c'est quelque chose d'abstrait mais elle a des champs qui portent les informations, dans l'exemple ci-dessus est le nom, l'année de naissance, lieu de naissance.

(Constituants constructeur) - Il est aussi appelé  le "constructeur"
  • Constituants ont toujours le même nom que la classe
  • Une classe avec un ou plusieurs constituants
  • Constituants avec ou sans paramètres, aucun constituant des paramètres par défaut appelés constituants
  • Constituants sont le moyen de créer un objet de la classe.
Si la classe Personne (Description  class) est quelque chose d'abstraite, mais lorsqu'il est spécifié pour vous ou moi, c'est deux  objets (instance) de la classe Personne. Et les constructeurs sont des méthodes spéciales pour créer des objets, des composants seront attribués des valeurs aux champs (champ) de la classe pour l'objet ..

Voyez l'illustration, initialiser l'objet (instance) de Constructor.

3- Héritage à java

Nous avons besoin de quelques classes qui participent à des illustrations.
  • Animal: Classe simulent une couche d'animaux.
  • Canard: Classe simulent une couche de canard, est une sous-classe d'Animal.
  • Chat: Classe simulent une couche de chat, est une sous-classe d'Anima
  • Souris: Classe simulent une couche de souris, est une sous-classe d'Animal.
Ici, nous avons la classe Animal, avec une méthode sans contenu.
  • Abstrait public Chaîne getAnimalName (); ( public abstract String getAnimalName(); )
Cette méthode est une méthode abstraite, dans la sous-classe, vous devez déclarer et mettre en œuvre son contenu. Cette méthode a le sens qui renvoie le nom de l'espèce animale
Classe Animal méthodes abstraites doit être déclarée comme abstraite (abstraite). La classe constituants abstraits (constructeur), mais vous ne pouvez pas créer des objets de celle-ci.
  • En substance, vous voulez créer un objet d'animal, vous devez créer à partir d'une espèce animale spécifique, dans ce cas, vous devez initialiser à partir du constructeur de chat, de souris ou de canard.
Animal.java
package org.o7planning.tutorial.inheritance.animal;

// La classe a au moins une méthode abstraite doit être déclarée abstraite.
public abstract class Animal {

	// Le nom, par exemple, Tom Chat, Jerry Souris..
	private String name;

	// Constructor par défaut.
	public Animal() {
		// Assignez la valeur par défaut pour le "nom
		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.
	// Renvoie le nom de cet animal.
	// Nội dung cụ thể của phương thức này
	// Le contenu spécifique de cette méthode sera mise en œuvre (implemented) dans la sous-classe.
	public abstract String getAnimalName();

}
Ensuite, voir classe Cat, hérité d'Animal.
Cat a é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 parent, pour initialiser la valeur aux champs de la classe parent.

 Si vous n'appelez pas, la valeur par défaut que Java a compris avoir appelé super (), ce qui signifie que le profil de messagerie par défaut pour appeler la classe.
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) {
		// Appelez le Constructor par défaut de la classe parent (Animal).
		// Pour affecter des valeurs aux champs de super classe.
		super();
		// Ensuite, assignez la valeur pour son champ (field).
		this.age = age;
		this.height = height;
	}

	public Cat(String name, int age, int height) {
		// Pour affecter des valeurs aux champs de super classe.
		super(name);
		// Ensuite, assignez la valeur pour 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) le contenu pour la méthode abstraite déclarée dans la classe parent.
	@Override
	public String getAnimalName() {
		return "Cat";
	}

}
Lorsque vous créez un objet Cat, qu'est-ce qui se passe?
 
Voir la classe de la souris, Hériter de Animal.
Voir la classe de la souris, sous-classe de Animal.
 

 
 
Mouse.java
package org.o7planning.tutorial.inheritance.animal;

public class Mouse extends Animal {

	private int weight;

	// Constructor par défaut .
	public Mouse() {
		// Gọi tới cấu tử Mouse(int)
		// Call to constructor Mouse(int)
		this(100);
	}

	// Constructor 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;
	}

	// Constructor 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éez un objet animal.
		// L'animal est une classe abstraite,,
		// vous ne pouvez pas créer un objet de Constructor de Animal.
		Animal tom = new Cat("Tom", 3, 20);

		System.out.println("name: " + tom.getName());
		System.out.println("animalName: " + tom.getAnimalName());

		// Utilisez l’opérateur « instanceof » pour vérifier
		// un objet doit être un certain type ou non.
		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 de l'exemple:
 
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 Chat.
		Cat tom = new Cat("Tom", 3, 20);

		// Appelez les méthodes héritées de la classe parent (Animal).
		System.out.println("name: " + tom.getName());
		System.out.println("animalName: " + tom.getAnimalName());

		System.out.println("-----------------");

		// ​​​​​​​
		// Appelez 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 de l'exemple:
 
 Pressé de type ( Cast) 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) {
			// Pressé type (cast) pour le type Cat
			Cat cat = (Cat) animal;

			// Et appelez une méthode de la classe Cat.
			System.out.println("Cat height: " + cat.getHeight());
		} else if (animal instanceof Mouse) {
			// Pressé type (cast) pour le type Mouse.
			Mouse mouse = (Mouse) animal;

			// Et appelez 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 (chat) ou dire que c'est un animal (Animal) qui est un aspect du polymorphisme.

Ou un autre exemple: sur votre CV enregistre que vous êtes un homme asiatique, alors que vous êtes un Vietnamien.

L'exemple ci-dessous montre comment vous comporter entre la déclaration et la réalité
 
Classe de  AsianCat est une classe héritée de la  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);
	}

	// Écraser (override) la méthode de la super classe (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 de l'exemple:
 

View more categories: