Obwohl es Schnittstelle und statische Methode sagt Es geht nicht um die ** statischen Funktionen ** in der in Java8 implementierten Schnittstelle.
Diejenigen, die das erwartet haben, tun es leid.
ArleneFamily.java
public final class ArleneFamily {
public static final class Father {
public static String name() {
return "Irenes Vater";
}
public static String birthDay() {
return "3/2";
}
}
public static final class Mother {
public static String name() {
return "Irenes Mutter";
}
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());
}
}
Es gibt eine konstante Klasse wie diese ... Die Strukturklasse der Eileen-Familienstruktur (ArleneFamily.java) und die Klasse, die sie anzeigt (Beispiel1). Tatsächlich scheint es außer der Familie Irene viele andere Kompositionsklassen für XX Familien zu geben.
Als vorhandene Spezifikation habe ich nur die Konfiguration jedes Hauses angezeigt. Ich möchte die Geburtstage der Familien Brett und Cindy zusammen anzeigen! !! Es gibt so etwas ...
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());
・
・
・
}
Es sieht so aus, aber ** Korehanaidaro ... **
Also mit einer Schnittstelle, Ich entschied mich zu denken, dass der Benutzer so etwas wie das Folgende haben möchte.
Sample3.java
public static void main(String[] args) {
printBirthDay(~ Moyamoya ~);
printBirthDay(~ Moyamoya ~);
・
・
・
}
private static void printBirthDay(~ Moyamoya ~) {
System.out.println(Schnittstelle.name() + ":" + Schnittstelle.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 "Irenes Vater";
}
public static String birthDay() {
return "3/2";
}
}
public static final class Mother implement Human {
public static String name() {
return "Irenes Mutter";
}
public static String birthDay() {
return "10/30";
}
}
}
Ja. Dies ist ein Fehler. Ich war wütend, dass ich die statische Methode entfernen sollte.
Ich verstehe, dass * static nicht überschrieben werden kann, aber Ich denke, es ist in Ordnung zu schreiben, wenn Sie gezwungen sind, die Schnittstelle zu implementieren *
Da dies nicht funktioniert, entfernen Sie statische Daten aus der Methode.
ArleneFamily.java
public final class ArleneFamily {
public static final class Father implement Human {
public String name() {
return "Irenes Vater";
}
public String birthDay() {
return "3/2";
}
}
public static final class Mother implement Human {
public String name() {
return "Irenes Mutter";
}
public String birthDay() {
return "10/30";
}
}
}
Ja, diesmal liegt ein Fehler in dem von Ihnen verwendeten Teil vor. ↓ Hier Teil
System.out.println(ArleneFamily.Father.name() + ":" +
Erstellen Sie eine Instanz! Das liegt daran, dass ich die statische Aufladung entfernt habe.
Es bleibt keine andere Wahl, als die Seite zu reparieren, die es verwendet ... Es gibt einige, und es wird innerhalb des Einflussbereichs schwierig sein. Als ich dachte, ** war ich schockiert! ** ** **
ArleneFamily.java
public final class ArleneFamily {
public static final Human Father = new Human() {
@Override
public String name() {
return "Irenes Vater";
}
@Override
public String birthDay() {
return "3/2";
}
};
Wenn du es so machst, musst du es nicht anfassen, oder?
Wenn du es versuchst Sicher genug, dies verursacht keinen Fehler auf der Benutzerseite ... ↓ Dieser Teil. Es läuft gut.
System.out.println(ArleneFamily.Father.name() + ":" +
Da die Klassenstruktur in Form der Instanzerstellung finalisiert wurde Beseitigt das Schreiben des launischen Teils.
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());
}
Da es sich ursprünglich um eine Constant-Klasse handelte, habe ich den Standardkonstruktor vorerst privat gemacht, damit er nicht neu ist. Damit ist die Reparatur des ursprünglichen Zwecks sicher abgeschlossen ~~
Na endlich das Hauptthema. (Lol)
Wenn das oben genannte kompiliert, Ursprüngliche innere Klasse (Vater) und Variable (Vater), die die menschliche Schnittstelle implementiert Kannst du koexistieren? Welche werden nach Möglichkeit priorisiert? Zur Frage ...
ArleneFamily.java
public final class ArleneFamily {
public static final Human Father = new Human() {
@Override
public String name() {
return "Irenes Vater";
}
@Override
public String birthDay() {
return "3/2";
}
};
public static final class Father {
public static String name() {
return "Irenes Vater";
}
public static String birthDay() {
return "11/12";
}
}
Ja, ich konnte zusammen leben. .. Ändern Sie den Rückgabewert und versuchen Sie, welcher tatsächlich aufgerufen wird.
Ausführungsergebnis
Irenes Vater:3/2
Die Variable wurde priorisiert. Das Ergebnis verschiedener Untersuchungen Hier ist 6.4.2. Verschleierung, 6.5. Bestimmung der Bedeutung eines Namens Es wurde richtig geschrieben.
** Variablen haben Vorrang vor Typen. Typ hat Vorrang vor Paket. ** ** **
Ich wusste es nicht··· Es ist unmöglich, vor Ort den gleichen Namen zu haben. Diesmal war es bei einer guten Gelegenheit bekannt.
Übrigens habe ich Family als Beispiel genommen, aber es ist eigentlich ein Produktsystem. Wenn Sie den Namen ersetzen, sieht es so aus Es fühlt sich seltsam an.
Es gibt keine Überschrift, weil es eine Geschichte hinter dem Flackern von Java ist.
Recommended Posts