▁implementations ▁to ▁help ▁with ▁this ▁process . ▁ ▁Furthermore , ▁the ▁methods ▁within ▁a ▁category ▁are ▁added ▁to ▁a ▁class ▁at ▁run - time . ▁Thus , ▁categories ▁permit ▁the ▁programmer ▁to ▁add ▁methods ▁to ▁an ▁existing ▁class ▁- ▁an ▁open ▁class ▁- ▁without ▁the ▁need ▁to ▁re compile ▁that ▁class ▁or ▁even ▁have ▁access ▁to ▁its ▁source ▁code . ▁For ▁example , ▁if ▁a ▁system ▁does ▁not ▁contain ▁a ▁spell ▁check er ▁in ▁its ▁String ▁implementation , ▁it ▁could ▁be ▁added ▁without ▁modifying ▁the ▁String ▁source ▁code . ▁ ▁Method s ▁within ▁categories ▁become ▁ind ist ingu ish able ▁from ▁the ▁methods ▁in ▁a ▁class ▁when ▁the ▁program ▁is ▁run . ▁A ▁category ▁has ▁full ▁access ▁to ▁all ▁of ▁the ▁instance ▁variables ▁within ▁the ▁class , ▁including ▁private ▁variables . ▁ ▁If ▁a ▁category ▁decl ares ▁a ▁method ▁with ▁the ▁same ▁method ▁signature ▁as ▁an ▁existing ▁method ▁in ▁a ▁class , ▁the ▁category ' s ▁method ▁is ▁adopted . ▁Thus ▁categories ▁can ▁not ▁only ▁add ▁methods ▁to ▁a ▁class , ▁but ▁also ▁replace ▁existing ▁methods . ▁This ▁feature ▁can ▁be ▁used ▁to ▁fix ▁bugs ▁in ▁other ▁classes ▁by ▁re writing ▁their ▁methods , ▁or ▁to ▁cause ▁a ▁global ▁change ▁to ▁a ▁class ' s ▁behavior ▁within ▁a ▁program . ▁If ▁two ▁categories ▁have ▁methods ▁with ▁the ▁same ▁name ▁but ▁different ▁method ▁sign atures , ▁it ▁is ▁undefined ▁which ▁category ' s ▁method ▁is ▁adopted . ▁ ▁Other ▁languages ▁have ▁attempted ▁to ▁add ▁this ▁feature ▁in ▁a ▁variety ▁of ▁ways . ▁T OM