public class MyClass{...}
class MyHelper{...}
Enclosing Class.Nested Class (MyClass.MyHelper)
**import (Paketname) .MyClass.MyHelper;
var h = new MyHelper ();
verwendet werden//MyHelper-Definition unter dem Klassenblock
public class MyClass {
//Definition der statischen Elementklasse
//Mitglieder können nicht von außerhalb meiner Klasse gesehen werden
private static class MyHelper {
public void show() {
System.out.println("Nested class is running!");
}
}
public void run() {
//
var helper = new MyHelper();
helper.show();
}
}
public class NestBasic {
public static void main(String[] args) {
var c = new MyClass();
c.run();
//
// var h = new MyClass.MyHelper(); //
}
}
MyHelpe ist ein Fehler, der von außerhalb von MyClass nicht sichtbar ist! Nicht statische Elementklasse (= innere Klasse) * Kein statischer Modifikator * ** Innere Klasse **: Gehört zum umschließenden Objekt * ** Statische Elementklasse **: Gehört zur umschließenden Klasse
class MyClass {
private String str1 = "Beiliegende Instanz";
private static String str2 = "Beiliegende Klasse";
private class MyHelper {
private String str1 = "Verschachtelte Instanz";
private static final String str2 = "Verschachtelte Klasse";
public void show() {
//Die innere Klasse hat einen Verweis auf das umschließende Objekt
//MyClass.Damit erreichbar
System.out.println(MyClass.this.str1); //Beiliegende Instanz
System.out.println(MyClass.str2); //Beiliegende Klasse
}
}
public void run() {
//Innere Klasseninstanz, die durch Einschließen der Klasseninstanzmethode erstellt wurde
var helper = new MyHelper();
helper.show();
//Greifen Sie vom umschließenden Objekt auf die innere Klasse zu
System.out.println(helper.str1); //Verschachtelte Instanz
System.out.println(MyHelper.str2); //Verschachtelte Klasse
}
}
public class NestedAccess {
public static void main(String[] args) {
var c = new MyClass();
c.run();
}
}
java:java.util.AbstractList.java
package java.util;
import java.util.function.Consumer;
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
//...Unterlassung
/*Iterators
Die interne Implementierung der Itr-Klasse muss nicht angezeigt werden
Es wäre schön, wenn der Typ Iteratoren, der die Implementierungsquelle darstellt, von außen gesehen werden könnte.
Der Rückgabewert der Iteratormethode ist der Iterator-Typ
*/
public Iterator<E> iterator() {
return new Itr();
}
//...Unterlassung
/*Innere Klasse
Implementierte einen Iterator, der auf das private Feld in der Liste zugreift und der Reihe nach auf die untergeordneten Elemente zugreift
Iterator wird separat als Iterator-Implementierungsklasse definiert
*/
private class Itr implements Iterator<E> {
//...Unterlassung
}
//...Unterlassung
}
neue Basisklasse (Argument, ...) {Klassenkörper}
**
new View.OnClickListener(){
//Registrierung des Ereignis-Listeners
btn.setOnClickListener(
//Anonyme Klasse(Ereignis-Listener)Definition
new View.OnClickListener(){
//btn Klicken Sie hier, um die aktuelle Uhrzeit in txt anzuzeigen
@Override
public void onClick(View view){
TextView txt = findViewById(R.id.txtResult);
txt.setText(LocalDateTime.now().toString());
}
}
);
Recommended Posts