[Java] Héritage

Qu'est-ce que l'héritage?

Comment utiliser l'héritage

Person.java


public class Person {
  public String name;
  public int age;

  public String show() {
    return String.format("%s(%ré).", this.name, this.age);
  }
}

BusinessPerson.java


//Créer une classe BusinessPerson qui hérite de Person
public class BusinessPerson extends Person {
  //Définition de méthode de travail unique à la classe dérivée
  public String work() {
    return String.format("%d an%s fonctionne bien aujourd'hui.", this.age, this.name);
  }
}
public class InheritBasic {
  public static void main(String[] args) {
    //Appelez uniquement la personne d'affaires
    var bp = new BusinessPerson();
    bp.name = "Ichiro Sato";
    bp.age = 30;
    //La méthode show peut être appelée comme un membre de la classe bp!
    System.out.println(bp.show()); //Je suis Ichiro Sato (30 ans).
    System.out.println(bp.work());  //Ichiro Sato, 30 ans, fonctionne bien aujourd'hui.
  }
}

Dissimulation sur le terrain

cache

Person.java


import java.time.ZonedDateTime;
public class Person {
  public String name;
  public ZonedDateTime birth = ZonedDateTime.now();
}

BusinessPerson.java


import java.time.LocalDateTime;
public class BusinessPerson extends Person {
  //Masquer le champ de naissance de la classe de base
  public LocalDateTime birth = LocalDateTime.now();
  public void show() {
    //Accéder aux champs masqués
    System.out.println(super.birth);
  }
}
public class HideBasic {

  public static void main(String[] args) {
    var bp = new BusinessPerson();
    //BusinessPerson.Montrer la naissance
    System.out.println(bp.birth); 
    bp.show();
    //Person.Afficher le champ de naissance
    Person p = new BusinessPerson();
    System.out.println(p.birth);
  }
}

Remplacement de méthode

public class Person {
  public String name;
  public int age;

  public String show() {
    return String.format("%s(%ré).", this.name, this.age);
  }
}
public class BusinessPerson extends Person {
  public BusinessPerson() {}
  //Remplacez la méthode show avec le même nom dans la classe de base
  @Override
  public String show() {
    return String.format("Des employés de bureau%s(%ré).", this.name, this.age);
  }

  public String work() {
    return String.format("%d an%s fonctionne bien aujourd'hui.", this.age, this.name);
  }
}

Référence de classe de base (super)

//Hériter de la classe BusinessPerson
public class EliteBusinessPerson extends BusinessPerson {
  @Override 
  //Appelez la méthode de travail de la classe de base et ajoutez votre propre traitement

  public String work() {
    //Appelez la super méthode au début de la classe dérivée
    var result = super.work();
    return String.format("%s Toujours sourire!", result);
  }
}
public class InheritBaseCall {
  public static void main(String[] args) {
    var ebp = new EliteBusinessPerson();
    ebp.name = "Yamada Taro";
    ebp.age = 35;
    System.out.println(ebp.work()); //Taro Yamada, 35 ans, fonctionne bien aujourd'hui. Toujours sourire!
  }
}

Constructeur de classe dérivée

MyParent.java


public class MyParent {
  public MyParent() {
    System.out.println("Je suis parent.");
  }
}

MyChild.java


public class MyChild extends MyParent {
  public MyChild() {
    System.out.println("Je suis un enfant.");
  }
}
public class InheritConstruct {
  public static void main(String[] args) {
    var c = new MyChild(); //Je suis parent. Je suis un enfant.
  }
}
//Classe supérieure (constructeur avec argument)
public class MyParent {
  public MyParent(String name) {
    System.out.printf("%est le parent de l'art.\n", name);
  }
}
public class MyChild extends MyParent {
  public MyChild(String name) {
    //Appeler un constructeur sans argument de classe supérieure à partir d'un constructeur de classe dérivé
    super(name);
    //Les constructeurs sont appelés dans l'ordre de la classe de base → classe dérivée
    System.out.printf("D'enfant%s.\n", name); //Je suis le parent de Taro Yamada.\n Je suis un enfant de Taro Yamada.
  }
}
public class InheritConstruct {
  public static void main(String[] args) {
    var c = new MyChild("Yamada Taro");
  }
}

Aucun héritage / remplacement

public class Person {
  String name;
  int age;
  public Person() {}
  //Ne pas remplacer la méthode show
  public final String show() {
    return String.format("%s(%ré).", this.name, this.age);
  }
}
//Pas d'héritage de la classe BusinessPerson
public final class BusinessPerson extends Person {
  public String intro() {
    return "Je suis un employé de bureau.";
  }
}

Conversion de type de type de référence

Upcast

//Upcast
public class CastUp {
  public static void main(String[] args) {
    //Convertir en affectant un objet BusinessPerson à une variable de type Person de classe de base
    Person bp = new BusinessPerson();
    bp.name = "Yamada Taro";
    bp.age = 20;
    System.out.println(bp.show());
  }
}

Abattu

Type de variable / type d'objet

BusinessPerson.java


public class BusinessPerson extends Person {
  public BusinessPerson() {}

  @Override
  public String show() {
    return String.format("Des employés de bureau%s(%ré).", this.name, this.age);
  }

  public String work() {
    return String.format("%d an%s fonctionne.", this.age, this.name);
  }
}
public class TypeDifference {

  public static void main(String[] args) {
    Person p = new BusinessPerson();
    p.name = "Yamada Taro";
    p.age = 30;
    // System.out.println(p.work()); //Erreur
    System.out.println(p.show()); //Je suis Taro Yamada (30 ans), employée de bureau.
  }
}

Masquage des méthodes / champs de classe

public class HideBasic {
  public static void main(String[] args) {
    var bp = new BusinessPerson();
    System.out.println(bp.birth);
    bp.show();
    //La variable p est de type Person
    Person p = new BusinessPerson();
    //Le champ de naissance de la classe Person est de type ZonedDateTime
    System.out.println(p.birth); //ZonedDateTime type
  }
}

Jugement de type

//Vérification de type
if(p instanceof Student){
    Student st = (Student)p;
    //Le traitement lors de la diffusion est correct
}

Acquisition de type

public class Main {
    public static void main(String[] args) {
    Person p1 = new Person();
    System.out.println(p1.getClass()); //class Person
    Person p2 = new BusinessPerson();
    System.out.println(p2.getClass()); //class BusinessPerson
  }
}

transfert

import java.util.Random;

public class Roulette extends Random {
//Limite supérieure de la roulette
private int bound;

  public Roulette(int bound) {
    this.bound = bound;
  }
  //Obtenez la valeur comme étant la limite supérieure du champ lié et générez un nombre aléatoire
  @Override
  public int nextInt() {
    return nextInt(this.bound);
  }
  //D'autres méthodes inutiles sont désactivées (contrairement au principe de remplacement de Rifkov)
  @Override
  public boolean nextBoolean() {
    throw new UnsupportedOperationException();
  }

  @Override
  public long nextLong() {
    throw new UnsupportedOperationException();
  }
}
import java.util.Random;

public class RouletteClient {
  public static void main(String[] args) {
    Random rou = new Roulette(10);
    System.out.println(rou.nextBoolean()); //UnsupportedOperationException
  }
}
import java.util.Random;

public class Roulette {
  private int bound;
  //Tenez l'objet ci-dessus dans le champ
  private Random random = new Random();

  public Roulette(int bound) {
    this.bound = bound;
  }
  //Déléguer le traitement au besoin
  public int nextInt() {
    return this.random.nextInt(this.bound);
  }
}

Recommended Posts

[Java] Héritage
Héritage Java
Héritage Java
java (héritage)
[Java] Héritage de classe
À propos de l'héritage Java
[Java] Surcharge / Remplacer / Héritage
Héritage
Héritage
Résumer l'héritage Java (Java Silver 8)
À propos de l'héritage (Java Silver)
Java
Java
[Java] Mémo d'héritage implicite
Mémo d'apprentissage Java (héritage)
Java à partir de débutant, héritage
[Java] Qu'est-ce que l'héritage de classe?
java (héritage du principe is-a)
Apprendre Java (0)
Étudier Java ―― 3
[Java] tableau
Jour 2 orienté objet Muscle Java ~ Héritage ~
[Java] Annotation
Module [Java]
Tableau Java
Astuces Java, astuces
Méthodes Java
Méthode Java
java (constructeur)
À propos de l'héritage
Tableau Java
[Java] ArrayDeque
java (remplacement)
java (méthode)
Journée Java 2018
java (tableau)
Java statique
Sérialisation Java
JAVA payé
Java (ensemble)
tri shell java
Étudier Java -5
java réfléchissant 获 获 举
java (interface)
Mémorandum Java
Étudier Java ―― 1
[Java] Array
[Java] Polymorphisme
Étudier Java # 0
Revue Java
framework java
Fonctionnalités Java
FastScanner Java
Fonctionnalités Java
java débutant 3
Mémo Java
java (encapsulation)
[Java] Surcharge
Les bases de Java
Décompiler Java