//  Author:  David Galles
//  class Containig:  Illustrating contained classes

class Containing
{
	private int x;
	ContainedClass interiorClass1;
	ContainedClass interiorClass2;
	
	// Constructor
	// Sets the value of the single instance variable, and creates two instances of 
	// an internal class,
	public Containing(int initialX, int initialY1, int initialY2)
	{
		interiorClass1 = new ContainedClass(initialY1);
		interiorClass2 = new ContainedClass(initialY2);
		x = initialX;
	}
		
	//  Method printSum:  Prints out the result of the add method of the two local
	//                    instance variables. 
	//                    Illustrating containing class calling method on contained instace
	//                    variables.
	public void printSum()
	{
		System.out.print("Sum1: ");
		System.out.println(interiorClass1.add());
		System.out.print("Sum2: ");
		System.out.println(interiorClass2.add());
	}
	
		
	class ContainedClass
	{
		protected int y;
		
		//  Constructor
		//  Sets the value for the single instance variable in the contained class
		public ContainedClass(int initialY)
		{
			y = initialY;
		}
		
		//  Method add:  Returns the sum of the instance variable y local to the
		//               contained class, and the variable x in the containing class.
		//               Illustrating contained class accessing containing variables
		public int add()
		{
			return x + y;
		}
		
				
	}
	
	
	public static void main(String args[])
	{
		Containing C1 = new Containing(1,2,3);
		Containing C2 = new Containing(5,6,7);
		
		C1.printSum();
		C2.printSum();
	}

}