package aa.bb.cc;

public class CClass extends SuperClass {
	public class Inner extends SuperInnerClass {
		public Inner() throws Exception {
		}
	}
	
	public void foo(SuperClass varsc, final int var){
		class Victory{}
	}
	
	public void bar(int x, int y){
		
	}
}