package com.learning.basic; public class InnerClassLearning { public static String data = "static"; public String instanceVariable = "instance"; // Static inner Class private static class TestStaticInner { public static void validate() { System.out.println(" -- static inner class -- "); String innerData = data; System.out.println(" Static inner can access outer class static member"); // String data = instanceVariable; // Not possbile } } // Instance inner class class TestInner { public void validate() { System.out.println(" -- instance inner class -- "); String innerData = data; System.out.println(" Instance inner can access outer class static member"); String data = instanceVariable; System.out.println(" Instance inner can access outer class instance member"); } } // anonymous inner class public void validate() { Thread a = new Thread (new Runnable() { @Override public void run() { System.out.println(" -- Anonymous inner class -- "); System.out.println(" Anonymous inner class instance"); } }); a.start(); } public static void main(String... strings) { InnerClassLearning.TestStaticInner.validate(); InnerClassLearning outer = new InnerClassLearning(); // Calling anonymous inner class outer.validate(); // Syntax for creating the inner class instance InnerClassLearning.TestInner testInner = outer.new TestInner(); testInner.validate(); } }