[Java] Vererbung

Was ist Vererbung?

Verwendung der Vererbung

Person.java


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

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

BusinessPerson.java


//Erstellen Sie eine BusinessPerson-Klasse, die Person erbt
public class BusinessPerson extends Person {
  //Arbeitsmethodendefinition, die für die abgeleitete Klasse eindeutig ist
  public String work() {
    return String.format("%d Jahr alt%s funktioniert heute gut.", this.age, this.name);
  }
}
public class InheritBasic {
  public static void main(String[] args) {
    //Nur Geschäftsperson anrufen
    var bp = new BusinessPerson();
    bp.name = "Ichiro Sato";
    bp.age = 30;
    //Die show-Methode kann wie ein Mitglied der bp-Klasse aufgerufen werden!
    System.out.println(bp.show()); //Ich bin Ichiro Sato (30 Jahre alt).
    System.out.println(bp.work());  //Ichiro Sato, 30 Jahre alt, arbeitet heute gut.
  }
}

Feldverschleierung

versteckt

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 {
  //Verstecke das Geburtsfeld der Basisklasse
  public LocalDateTime birth = LocalDateTime.now();
  public void show() {
    //Greifen Sie auf versteckte Felder zu
    System.out.println(super.birth);
  }
}
public class HideBasic {

  public static void main(String[] args) {
    var bp = new BusinessPerson();
    //BusinessPerson.Geburt zeigen
    System.out.println(bp.birth); 
    bp.show();
    //Person.Geburtsfeld anzeigen
    Person p = new BusinessPerson();
    System.out.println(p.birth);
  }
}

Methodenüberschreibung

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

  public String show() {
    return String.format("%s(%d).", this.name, this.age);
  }
}
public class BusinessPerson extends Person {
  public BusinessPerson() {}
  //Überschreiben Sie die gleichnamige show-Methode in der Basisklasse
  @Override
  public String show() {
    return String.format("Von Büroangestellten%s(%d).", this.name, this.age);
  }

  public String work() {
    return String.format("%d Jahr alt%s funktioniert heute gut.", this.age, this.name);
  }
}

Basisklassenreferenz (super)

//Erben Sie die BusinessPerson-Klasse
public class EliteBusinessPerson extends BusinessPerson {
  @Override 
  //Rufen Sie die Arbeitsmethode der Basisklasse auf und fügen Sie Ihre eigene Verarbeitung hinzu

  public String work() {
    //Rufen Sie die Super-Methode am Anfang der abgeleiteten Klasse auf
    var result = super.work();
    return String.format("%s Immer lächeln!", 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()); //Der 35-jährige Taro Yamada arbeitet heute gut. Immer lächeln!
  }
}

Abgeleiteter Klassenkonstruktor

MyParent.java


public class MyParent {
  public MyParent() {
    System.out.println("Ich bin ein Elternteil.");
  }
}

MyChild.java


public class MyChild extends MyParent {
  public MyChild() {
    System.out.println("Ich bin ein Kind.");
  }
}
public class InheritConstruct {
  public static void main(String[] args) {
    var c = new MyChild(); //Ich bin ein Elternteil. Ich bin ein Kind.
  }
}
//Oberschicht (Konstruktor mit Argument)
public class MyParent {
  public MyParent(String name) {
    System.out.printf("%ist der Elternteil von s.\n", name);
  }
}
public class MyChild extends MyParent {
  public MyChild(String name) {
    //Rufen Sie einen argumentlosen Konstruktor einer höheren Klasse von einem abgeleiteten Klassenkonstruktor auf
    super(name);
    //Konstruktoren werden in der Reihenfolge Basisklasse → abgeleitete Klasse aufgerufen
    System.out.printf("Vom Kind%s.\n", name); //Ich bin Taro Yamadas Eltern.\n Ich bin ein Kind von Taro Yamada.
  }
}
public class InheritConstruct {
  public static void main(String[] args) {
    var c = new MyChild("Yamada Taro");
  }
}

Keine Vererbung / Überschreibung

public class Person {
  String name;
  int age;
  public Person() {}
  //Show-Methode nicht überschreiben
  public final String show() {
    return String.format("%s(%d).", this.name, this.age);
  }
}
//Keine Vererbung der BusinessPerson-Klasse
public final class BusinessPerson extends Person {
  public String intro() {
    return "Ich bin Büroangestellter.";
  }
}

Konvertierung des Referenztyptyps

Upcast

//Upcast
public class CastUp {
  public static void main(String[] args) {
    //Konvertieren Sie, indem Sie ein BusinessPerson-Objekt einer Variablen der Basisklasse Personentyp zuweisen
    Person bp = new BusinessPerson();
    bp.name = "Yamada Taro";
    bp.age = 20;
    System.out.println(bp.show());
  }
}

Niedergeschlagen

Variablentyp / Objekttyp

BusinessPerson.java


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

  @Override
  public String show() {
    return String.format("Von Büroangestellten%s(%d).", this.name, this.age);
  }

  public String work() {
    return String.format("%d Jahr alt%s funktioniert.", 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()); //Error
    System.out.println(p.show()); //Ich bin Taro Yamada (30 Jahre alt), ein Büroangestellter.
  }
}

Ausblenden von Klassenmethoden / Feldern

public class HideBasic {
  public static void main(String[] args) {
    var bp = new BusinessPerson();
    System.out.println(bp.birth);
    bp.show();
    //Die Variable p ist vom Typ Person
    Person p = new BusinessPerson();
    //Das Geburtsfeld der Person-Klasse ist vom Typ ZonedDateTime
    System.out.println(p.birth); //ZonedDateTime-Typ
  }
}

Typurteil

//Typprüfung
if(p instanceof Student){
    Student st = (Student)p;
    //Verarbeitung beim Gießen ist korrekt
}

Typerfassung

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
  }
}

Transfer

import java.util.Random;

public class Roulette extends Random {
//Roulette-Obergrenze
private int bound;

  public Roulette(int bound) {
    this.bound = bound;
  }
  //Holen Sie sich den Wert als Obergrenze des gebundenen Feldes und generieren Sie eine Zufallszahl
  @Override
  public int nextInt() {
    return nextInt(this.bound);
  }
  //Andere unnötige Methoden sind deaktiviert (entgegen Rifkovs Ersetzungsprinzip)
  @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;
  //Halten Sie das obige Objekt im Feld
  private Random random = new Random();

  public Roulette(int bound) {
    this.bound = bound;
  }
  //Delegieren Sie die Verarbeitung nach Bedarf
  public int nextInt() {
    return this.random.nextInt(this.bound);
  }
}

Recommended Posts

[Java] Vererbung
Java-Vererbung
Java-Vererbung
Java (Vererbung)
[Java] Klassenvererbung
Über Java-Vererbung
[Java] Überladen / Überschreiben / Vererbung
Erbe
Erbe
Fassen Sie die Java-Vererbung zusammen (Java Silver 8)
Informationen zur Vererbung (Java Silver)
Java
Java
[Java] Implizites Vererbungsprotokoll
Java-Lernnotiz (Vererbung)
Java ab Anfänger, Vererbung
[Java] Was ist Klassenvererbung?
Java (Vererbung von is-ein Prinzip)
Java lernen (0)
Java studieren ―― 3
[Java] -Array
Muskel Java Objektorientierter Tag 2 ~ Vererbung ~
[Java] Anmerkung
[Java] Modul
Java-Array
Java-Tipps, Tipps
Java-Methoden
Java-Methode
Java (Konstruktor)
Über die Vererbung
Java-Array
[Java] ArrayDeque
Java (überschreiben)
Java (Methode)
Java Day 2018
Java (Array)
Java statisch
Java-Serialisierung
JAVA hat bezahlt
Java (gesetzt)
Java-Shell-Sortierung
Java studieren -5
Java reflektierend 获 获 举
Java (Schnittstelle)
Java-Memorandum
Java studieren ―― 1
[Java] Array
[Java] Polymorphismus
Java # 0 studieren
Java-Überprüfung
Java-Framework
Java-Funktionen
FastScanner Java
Java-Funktionen
Java Anfänger 3
Java-Memo
Java (Kapselung)
[Java] Überladung
Java-Grundlagen
Java dekompilieren