Quand j'étais inquiet des méthodes statiques dans l'interface java, je suis arrivé à l'ordre d'interprétation des noms

Bien qu'il dise interface et méthode statique Il ne s'agit pas des ** fonctions statiques ** de l'interface implémentée dans java8.

Ceux qui s'y attendaient sont désolés.


L'autre jour? J'ai pensé cela, alors je vais le laisser comme note de service.

ArleneFamily.java


public final class ArleneFamily {

	public static final class Father {
		public static String name() {
			return "Papa d'Irène";
		}
		public static String birthDay() {
			return "3/2";
		}
	}

	public static final class Mother {
		public static String name() {
			return "Maman d'Irène";
		}
		public static String birthDay() {
			return "10/30";
		}
	}
}

Sample1.java


public class Sample1 {
	public static void main(String[] args) {
		System.out.println(ArleneFamily.Father.name() + ":" + ArleneFamily.Father.birthDay());
		System.out.println(ArleneFamily.Mother.name() + ":" + ArleneFamily.Mother.birthDay());
	}
}

Il y a une classe constante comme celle-ci ... La classe de structure de la famille Eileen (ArleneFamily.java) et la classe qui l'affiche (Sample1). En fait, il semble qu'il existe de nombreuses classes de composition de la famille XX autres que la famille Irene.

En tant que spécification existante, je n'ai affiché que la configuration de chaque maison. Je veux montrer les anniversaires des familles Brett et Cindy ensemble! !! Il y a quelque chose comme ça ...

Sample2.java


public class Sample2 {
	public static void main(String[] args) {
		System.out.println(ArleneFamily.Father.name() + ":" + ArleneFamily.Father.birthDay());
		System.out.println(ArleneFamily.Mother.name() + ":" + ArleneFamily.Mother.birthDay());
		System.out.println(BretFamily.Father.name() + ":" + ArleneFamily.Father.birthDay());
		System.out.println(BretFamily.Mother.name() + ":" + ArleneFamily.Mother.birthDay());
・
・
・
	}

Cela ressemble à ceci, mais ** Korehanaidaro ... **

Donc avec une interface, J'ai décidé de penser que l'utilisateur veut avoir quelque chose comme ce qui suit.

Sample3.java


	public static void main(String[] args) {
		printBirthDay(~ Moyamoya ~);
		printBirthDay(~ Moyamoya ~);
・
・
・
	}

	private static void printBirthDay(~ Moyamoya ~) {
		System.out.println(interface.name() + ":" + interface.birthDay());
	}

Créez immédiatement une interface humaine,

Human.java


public interface Human {
	public String name();
	public String birthDay();
}

subvention impl.

ArleneFamily.java


public final class ArleneFamily {

	public static final class Father implement Human {
		public static String name() {
			return "Papa d'Irène";
		}
		public static String birthDay() {
			return "3/2";
		}
	}

	public static final class Mother implement Human {
		public static String name() {
			return "Maman d'Irène";
		}
		public static String birthDay() {
			return "10/30";
		}
	}
}

Oui. Ceci est une erreur. J'étais en colère que je devrais supprimer la méthode statique.

Je comprends que * static ne peut pas être remplacé, mais Je pense que c'est correct d'écrire si vous êtes obligé d'implémenter l'interface *

Comme cela ne fonctionne pas, supprimez la statique de la méthode.

ArleneFamily.java


public final class ArleneFamily {

	public static final class Father implement Human {
		public String name() {
			return "Papa d'Irène";
		}
		public String birthDay() {
			return "3/2";
		}
	}

	public static final class Mother implement Human {
		public String name() {
			return "Maman d'Irène";
		}
		public String birthDay() {
			return "10/30";
		}
	}
}

Oui, cette fois, il y a une erreur dans la pièce que vous utilisez. ↓ Voici une partie

System.out.println(ArleneFamily.Father.name() + ":" +

Créez une instance! Eh bien, c'est parce que j'ai supprimé la statique.

Il n'y a pas d'autre choix que de fixer le côté qui l'utilise ... Il y en a pas mal, et ce sera difficile dans le champ d'influence. Quand j'ai pensé, ** j'étais choqué! ** **

ArleneFamily.java


public final class ArleneFamily {

	public static final Human Father = new Human() {
		@Override
		public String name() {
			return "Papa d'Irène";
		}
		@Override
		public String birthDay() {
			return "3/2";
		}
	};

Si vous le faites comme ça, vous n'avez pas à le toucher, non?

Si tu essayes Effectivement, cela ne provoque pas d'erreur côté utilisateur ... ↓ Cette partie. Ça va bien.

System.out.println(ArleneFamily.Father.name() + ":" +

De plus, puisque la structure de classe a été finalisée sous forme de création d'instance Élimine l'écriture de la partie maussade.

Sample3.java


	public static void main(String[] args) {
		printBirthDay(ArleneFamily.Father);
		printBirthDay(ArleneFamily.Mother);
・
・
・
	}

	private static void printBirthDay(Human human) {
		System.out.println(human.name() + ":" + human.birthDay());
	}

Pour le moment, comme il s'agissait à l'origine d'une classe Constant, j'ai rendu le constructeur par défaut privé afin qu'il ne soit pas nouveau. Avec cela, la réparation de l'objectif initial est terminée en toute sécurité ~~

Enfin le sujet principal. (Lol)

Si ce qui précède compile, Classe interne d'origine (Père) et variable (Père) qui implémente l'interface humaine Pouvez-vous coexister? Lequel sera priorisé si possible? À la question ...

ArleneFamily.java


public final class ArleneFamily {

	public static final Human Father = new Human() {
		@Override
		public String name() {
			return "Papa d'Irène";
		}
		@Override
		public String birthDay() {
			return "3/2";
		}
	};

	public static final class Father {
		public static String name() {
			return "Le père d'Irène";
		}
		public static String birthDay() {
			return "11/12";
		}
	}

Oui, j'ai pu vivre ensemble. .. Modifiez la valeur de retour et essayez celle qui est réellement appelée.

Résultat d'exécution


Papa d'Irène:3/2

La variable a été priorisée. Le résultat de diverses enquêtes Voici 6.4.2. Obscurcissant, 6.5. Déterminer la signification d'un nom Il a été écrit correctement.

** Les variables ont priorité sur les types. Le type a priorité sur le package. ** **

Je ne savais pas··· Eh bien, il est impossible de se donner la peine d'utiliser le même nom sur le site. Il était connu à une bonne occasion cette fois.

Au fait, j'ai pris Family comme exemple, mais c'est en fait un système de produits. Si vous remplacez le nom, il ressemble à ceci orz C'est étrange.

Il n'y a pas de titre car c'est une histoire derrière le scintillement de java.

Recommended Posts

Quand j'étais inquiet des méthodes statiques dans l'interface java, je suis arrivé à l'ordre d'interprétation des noms
Résumé des points qui m'inquiétaient lors de la migration de Java vers Kotlin
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
A propos de l'ordre de description des propriétés système Java
À propos de l'idée des classes anonymes en Java
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Quand j'ai pensé à l'erreur 402 qui est apparue soudainement au milieu de l'introduction de PAY.jp, il y avait un endroit inattendu
La partie à laquelle j'étais accro dans "Introduction à Ajax dans les applications Web Java" de NetBeans
A été effectué dans l'année de base de la semaine calendaire Java
Le piège que l'implémentation par défaut de l'interface Java 8 apporte
Pensez aux différences entre les fonctions et les méthodes (en Java)
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
La validation de printemps était importante dans l'ordre de Form et BindingResult
J'ai essayé de résumer les méthodes de Java String et StringBuilder
Accéder à l'interface réseau avec Java
Ce que je n'aime pas lors de l'utilisation de l'interface d'une fonction avec des arguments par défaut dans Kotlin depuis Java
Ordre de traitement dans le programme
Comment trouver le nombre total de pages lors de la pagination en Java
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
J'étais coincé avec la gestion des fuseaux horaires lors du formatage avec SimpleDateFormat
Dans Apache POI 3.15, lorsque j'obtiens le résultat d'une formule, FormulaParseException se produit (la formule fait référence à "cellule avec le nom de la feuille comprenant" ・ ")
Quand j'ai voulu créer une méthode pour Premium Friday, c'était déjà dans l'API standard Java 8
Obtenez le résultat de POST en Java
J'ai essayé le nouveau yuan à Java
[jour: 5] J'ai résumé les bases de Java
L'histoire de l'écriture de Java dans Emacs
J'ai reçu les données du voyage (application agenda) en Java et j'ai essayé de les visualiser # 001
Comparaison de chaînes de caractères: j'ai été pris dans le problème de vérification des compétences de Paisa
[Java] Je l'ai vérifié car il était erratique lors de la conversion du type. <Opérateur de diffusion>
À propos de la signification des variables de type, E, T, etc. utilisées dans les génériques utilisés en Java
Je ne savais pas que les classes internes pouvaient être définies dans l'interface [Java]
J'ai été englouti par l'obscurité de Romaji essayant de convertir mon nom en Romaji
Mémo de support temporaire lorsque le nom du paramètre de méthode de la classe Java ne peut pas être obtenu par réflexion dans le projet de plug-in Eclipse
[Recherche élastique x Java] Le résultat de l'exécution de la requête acquise en Java étant différent de l'hypothèse, j'ai étudié → Résumé du contenu correspondant
Je veux que vous racontiez que l'erreur a été résolue lorsque vous avez poignardé le chargeur dans le coin de la tête
[Mots qui m'ont été épelés lorsque j'étais en première année ⑩] Veuillez comprendre la méthode de codage Java minimale. (1er: dénomination)