class La classe dérivée étend la classe de base {}
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.
}
}
super
**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);
}
}
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);
}
}
//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!
}
}
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");
}
}
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.";
}
}
//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());
}
}
Person p = new BusinessPerson();
BusinessPerson bp = (BusinessPerson)p;
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.
}
}
nom de classe.nom de méthode (...)
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
}
}
Person p = new BusinessPerson();
//OK
* BusinessPerson bp = (BusinessPerson)p;
//OK
* Student st = (Student)p;
//NG//Vérification de type
if(p instanceof Student){
Student st = (Student)p;
//Le traitement lors de la diffusion est correct
}
getClass
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 {
//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