Your problem is thinking "The main method and Class3 are both inside Class1 so how come the main method cannot see it?"
consider the following:
class Foo {
public static void main(String[] args) {
Class3 class3 = new Class3();
}
}
All I did was place your main method in a completely different class. How is it supposed to find Class3? It has no idea where it is. As a general rule each class should be in its own file unless you are 1000% sure it needs to be an inner class. The reason you make a class an inner class is because it only needs to be used by its enclosing outer class. As soon as you try to use it outside that class (as you have done in the main method) you break that rule.