import java.awt.Frame;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TopLevelClass extends Frame {	//Top Level Class
	public static class AppListener extends WindowAdapter {	//Static Inner Class
		public void windowClosing(WindowEvent e) {
			((Window)e.getSource()).dispose();
			System.out.println("StaticInnerClass");
		}

		public void windowClosed(WindowEvent e) {
			System.exit(0);
		}
	}

	public TopLevelClass() {
		System.out.println("TopLevelClass");

		class PrivateDataType {	//Named Inner Class
			public PrivateDataType() {
				System.out.println("NamedInnerClass");
			}
		};

		PrivateDataType test = new PrivateDataType();

		addWindowListener(new WindowAdapter() {	//Anonymous Inner Class
			public void windowClosing(WindowEvent e) {
				((Window)e.getSource()).dispose();
				System.out.println("AnonymousInnerClass");
			}

			public void windowClosed(WindowEvent e) {
				System.exit(0);
			}
			});
		addWindowListener(new AppListener());
	}

	public static void main(String[] args) {
		TopLevelClass test = new TopLevelClass();
		test.show();
	}
}
