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.
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());
}
Human.java
public interface Human {
public String name();
public String birthDay();
}
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