// test016
public abstract class A extends p1.p2.fpfpfpfppffp.A
		implements
			Runnable,
			Cloneable,
			Serializable,
			Toto,
			Titi,
			Tata {
	Object[] s[] = null, o, s2[/*        */] = null; // test 
	A s3, o2, s4 = null; // test 
} // end of class
