Als ich mir Sorgen über statische Methoden in der Java-Oberfläche machte, kam ich zur Reihenfolge der Namensinterpretation

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.


Neulich? Ich habe das gedacht, also lasse ich es als Memo.

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());
	}

Erstellen Sie sofort eine Benutzeroberfläche,

Human.java


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

impl gewähren.

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

Als ich mir Sorgen über statische Methoden in der Java-Oberfläche machte, kam ich zur Reihenfolge der Namensinterpretation
Zusammenfassung der Punkte, über die ich mir bei der Migration von Java nach Kotlin Sorgen gemacht habe
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Über die Idee anonymer Klassen in Java
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Als ich an den 402-Fehler dachte, der plötzlich mitten in der Einführung von PAY.jp auftrat, gab es einen unerwarteten Ort
Der Teil, dem ich in "Einführung in Ajax in Java-Webanwendungen" von NetBeans verfallen war
Wurde im Basisjahr der Java-Kalenderwoche durchgeführt
Die Falle, die die Standardimplementierung der Java 8-Schnittstelle mit sich bringt
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
Die Frühjahrsvalidierung war in der Reihenfolge von Form und BindingResult wichtig
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
Was mir bei der Verwendung der Schnittstelle einer Funktion mit Standardargumenten in Kotlin aus Java nicht gefällt
Reihenfolge der Verarbeitung im Programm
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Beim Formatieren mit SimpleDateFormat blieb ich beim Umgang mit Zeitzonen
Wenn ich in Apache POI 3.15 das Ergebnis einer Formel erhalte, erhalte ich eine FormulaParseException (die Formel bezieht sich auf "Zellen mit Blattnamen, die" ・ "enthalten).
Als ich eine Methode für Premium Friday erstellen wollte, war sie bereits in der Java 8-Standard-API enthalten
Holen Sie sich das Ergebnis von POST in Java
Ich habe das neue Yuan-Problem in Java ausprobiert
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Die Geschichte des Schreibens von Java in Emacs
Ich habe die Daten der Reise (Tagebuchanwendung) in Java erhalten und versucht, sie # 001 zu visualisieren
Zeichenfolgenvergleich: Ich war in das Skill-Check-Problem von Paisa verwickelt
[Java] Ich habe es überprüft, weil es beim Konvertieren des Typs fehlerhaft war. <Cast-Operator>
Informationen zur Bedeutung von Typvariablen, E, T usw., die in in Java verwendeten Generika verwendet werden
Ich wusste nicht, dass innere Klassen in der [Java] -Schnittstelle definiert werden können
Ich wurde von der Dunkelheit Romajis verschluckt, als ich versuchte, meinen Namen in Romaji umzuwandeln
Temporäres Support-Memo, wenn der Name des Methodenparameters der Java-Klasse nicht durch Reflektion im Eclipse-Plug-In-Projekt abgerufen werden kann
[Elastische Suche x Java] Da das Ausführungsergebnis der in Java erfassten Abfrage von der Annahme abweicht, habe ich → Zusammenfassung der entsprechenden Inhalte untersucht
Ich möchte, dass Sie die Geschichte erzählen, dass der Fehler behoben wurde, als Sie das Ladegerät in die Ecke Ihres Kopfes gestochen haben
[Wörter, die mir geschrieben wurden, als ich in der ersten Klasse war ⑩] Bitte verstehen Sie die minimale Java-Codierungsmethode. (1 .: Benennung)