 
  
  class person extends actor {    person  
  
  public person() { 
  	role = new actor[ Final+1 ];
  	for( int i = Person; i <= Final; i++ ) role[i]=this;
  	become(Person);
  	}
  
  public boolean exists() { return role [role] != this; }
  
  public actor self() { 
  	if ( role[ Person ] != this ) return role[ Person ].self();
  	else return role [role];
  	}
  
  public void become(actor p) { role[ Person ] = p; }
  
  public void become(int R) {
  
  if (role[ Person ] != this) self().become(R);
  else {
  	_role = R;
  	if ( role [role] == this ) {
  		switch(_role) {
  		  case Person: break; // nothing changes
  		  case Student: role [role] = new student(); break;
  		  case Employer: role [role] = new employer(); break;
  		  case Final: role [role] = new actor(); break;
  		  default: break; // nothing happens
  		  }
  	}
       } }
  
  int _role;
  actor role[];
  };
  
slide: person.java