[Java] Mémo d'héritage implicite

Classe d'objet

La classe Object est l'ancêtre de chaque classe. Il a été hérité. Il a les méthodes suivantes.

--ʻEquals () : Vérifie si une instance est la même que la vôtre. --toString () `: renvoie une représentation sous forme de chaîne de votre propre contenu.

En ayant la classe Object, il est possible de créer des "méthodes qui peuvent passer des instances de n'importe quel type" en utilisant le polymorphisme, et de définir "des méthodes que toutes les classes veulent avoir au moins".

Quelque chose comme System.out.println peut accepter un objet comme argument. Alors

Sub.java


public class Sub{
    //En supposant que quelque chose est écrit
}

Main.java


public class Main
    public static void main(String[] args){
        Sub s = new Sub();

        System.out.println(s);            // (1)
        System.out.println(s.toString()); // (2)
}

Les résultats de sortie de «(1)» et «(2)» sont identiques.

Résultat d'exécution.


test.Sub@5c8da962
test.Sub@5c8da962

Méthode toString

Remplacer et utiliser. Dans l'exemple précédent,

Sub.java


public class Sub {
	String name = "Honda Mio";

	public String toString(){
		return this.name;
	}
}

Main.java


public class Main
    public static void main(String[] args){
        Sub s = new Sub();
        System.out.println(s);            // (1)
        System.out.println(s.toString()); // (2)
}

Résultat d'exécution.


Honda Mio// (1)
Honda Mio// (2)

C'est quoi ce programme? (Trop rugueux)

La méthode toString elle-même de la classe String est

String.java


public class toString(){
    return this;
}

Cela semble être le seul. J'ai appuyé sur F3 dans Eclipse et je l'ai lu, mais c'était sur la ligne 2806.

méthode égale

Il peut être utilisé pour le jugement d'équivalence et le jugement d'égalité.

Reconnaissance grossière. La méthode «equals» simple elle-même est

String.java


    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;

(C'était sur la ligne 1002) Si vous regardez cela de plus près maintenant, il fait nuit et il semble que vous resterez éveillé toute la nuit. Mais, très grosso modo, cela signifie qu'ils font en fait un jugement d'égalité. Ainsi, lorsque vous l'utilisez réellement, décidez ** de ce qui est équivalent **.

Ici, si le champ nom est le même, Yoshi! Alors ...

Sub.java


public class Sub {
	String name = "Honda Mio";

	public boolean equals(Object o){
		//S'ils sont égaux(Certainement équivalent)
		if (this == o) {
			return true;
		}
		
		//S'ils sont équivalents
		if (o instanceof Sub) {
			Sub s = (Sub) o;
			if (this.name == s.name) {
				return true;
			}
		}
		
		//Si ni égal ni équivalent
		return false;
	}
}

Main.java


public class Main {
	public static void main(String[] args) {
		//Créer 3 instances
		Sub s1 = new Sub();
		Sub s2 = new Sub();
		Sub s3 = new Sub();

		//Entrez une valeur dans chaque champ de nom
		s1.name = "Honda Mio";
		s2.name = "Honda Mio";
		s3.name = "Keisuke Honda";

		//Sortie du résultat du jugement d'équivalence
		System.out.pritln( s1.equals(s2) );
		System.out.pritln( s1.equals(s3) );
	}
}

Résultat de sortie.


true
false

C'est un programme vraiment grossier Eh bien, c'est un rappel de son utilisation, donc tout va bien ...

Livre de référence

[Introduction à Java 2nd Edition] (https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BJava%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1-%E6%B8%85%E5%96%AC/dp/484433638X) Pp.541-551

Recommended Posts

[Java] Mémo d'héritage implicite
Mémo d'apprentissage Java (héritage)
[Java] Héritage
Mémo Java
Héritage Java
Héritage Java
java (héritage)
java quoi que ce soit mémo
[Java] Héritage de classe
Mémo Java Silver
Remarque sur Java SE 7
java n'importe quoi mémo 2
À propos de l'héritage Java
Mémo de spécification Java
Mémo de modèle Java
Mémo de l'environnement de développement Java
mémo de connaissances de base java
Mémo d'apprentissage Java (méthode)
Mémo Java Kuche Day
Résumer l'héritage Java (Java Silver 8)
java se 8 programmeur Ⅰ mémo
Mémo privé payant Java
À propos de l'héritage (Java Silver)
Mémo d'apprentissage Java (basique)
(Mémo) Java pour instruction
expression lambda java [écriture de notes]
Mémo d'apprentissage Java (interface)
mémo de programmation du concours java
[Mémo] Liste liée Java
Remarque sur Java (WebSphere Application Server) [1]
Résumé d'héritage avancé, interface -java
[Java] Mémo de nom du nom de variable
Sous-chaîne de mémo Java (classe standard)
Héritage de l'interface de l'historique d'apprentissage JAVA
Mémo d'apprentissage Java (type de données)
Longueur du mémo Java (classe standard)
Mémo de la méthode d'étude Java Silver
Créer une méthode java [Memo] [java11]
Mémo de préparation à l'examen Java Silver
Mémo d'apprentissage Java (opérateur logique)
Mémo d'apprentissage Java (classe abstraite)
[Java] Date Termes associés mémo
Mémo d'étude Java 2 avec Progate
[Java] Qu'est-ce que l'héritage de classe?
java (héritage du principe is-a)
Que sont les métriques Java? _Memo_20200818
Java HashMap, entrySet [Mémo personnel]
Jour 2 orienté objet Muscle Java ~ Héritage ~
[Eclipse Java] Mémo des paramètres de l'environnement de développement
Mémo d'apprentissage Java (création d'un tableau)
Mémo d'utilisation de JCA (Java Encryption Architecture)
Héritage
[Java] Mémo pour nommer les noms de classe
Héritage
[Mémo de la session d'étude] Java Day Tokyo 2017
Mémo d'apprentissage Java (instruction while, instruction do-while)
Java
De Java à VB.NET - Écriture de notes de contraste