Casting to superclasses and interfaces


Details:

This code show the basic principle that labels constrain the object they are attached to, but don't change its underlying form. This allows COM-style interface frameworks to work smoothly.


Original author/s: Andy Evans
Original location/s:
License: none


Imports and instance variables:

	N/A


Code:

	class Casting {

		public Casting () {
	
			AClass aObject = new AClass();
		
			// Objects constrained by one interface can be cast into another interface 
			// the underlying object implements.
			Interface1 interface1 = (Interface1) aObject;
			Interface2 interface2 = (Interface2) interface1;
		
			// Objects cast into one class type it extends can be cast into another class 
			// further up the extension heirarchy and back again.
			BClass bObject = (BClass) aObject;
			CClass cObject = (CClass) bObject;
			AClass aObjectAgain = (AClass) cObject;
		
		}
	
		public static void main (String args[]) {
			new Casting();
		}
	}

	interface Interface1 {

	}

	interface Interface2 {

	}

	class AClass extends BClass implements Interface1, Interface2 {

	}

	class BClass extends CClass {

	}

	class CClass {

	}