class Abgeleitete Klasse erweitert Basisklasse {}
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.
}
}
super
** zugegriffen werdenPerson.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);
}
}
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);
}
}
//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!
}
}
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");
}
}
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.";
}
}
//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());
}
}
Person p = new BusinessPerson();
BusinessPerson bp = (BusinessPerson)p;
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.
}
}
class name.method name (...)
aufgerufenpublic 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
}
}
Person p = new BusinessPerson();
//OK
* BusinessPerson bp = (BusinessPerson)p;
//OK
* Student st = (Student)p;
//NG//Typprüfung
if(p instanceof Student){
Student st = (Student)p;
//Verarbeitung beim Gießen ist korrekt
}
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
}
}
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