Another good option would be to say ICloseable extends IUIComponent b/c IUIComponent is a Flex interface defined for you that has most of what you want.
-Ryan --- In flexcoders@yahoogroups.com, "b_alen" <[EMAIL PROTECTED]> wrote: > > I wouldn't suggest you uptype to an IClosable interface. By doing so, > you loose access to all the members of the UIComponent. And having > access to super class's members is why you do inheritance in the first > place. > > say: > > class Sub extends UIComponent implements IClosable > > var sub1:IClosable = new Sub(); > sub1.id; // You get an error here > sub1.isClosed; // this works > > var sub2:UIComponent = new Sub(); > sub2.id; // this works > sub2.isClosed; // You get an error here > > > I suggest you create a subclass of UIComponent, say AbstractUIComp*, > which will by default have all the members of UIComponent, plus all > the new members you want to add on your own (isClosed). Then you just > make more subclasses of the AbstractUIComp and you can safely uptype > them later to AbstractUIComp to get the polymorphism working. > > say: > > class AbstractUIComp extends UIComponent > class Sub extends AbstractUIComp > > var sub:AbstractUIComp = new Sub(); > sub.id; // this works > sub.isClosed; // this works > > > * Unfortunately Abstract classes and members are not supported by AS3, > so you have to just "know" that it is an Abstract class (class that > you don't instantiate, you just use it for subclassing it). It would > also be a bit more elegant if you would implement IClosable for the > AbstractUIComp and all of it's classes. > > Cheers > > > --- In flexcoders@yahoogroups.com, "dsds99" <dsds99@> wrote: > > > > Thanks, your solution worked. > > > > If I think about it, I'm puzzled. Just like UIComponent, the IClosable > > interface doesn't have the isClosed property either. So when I cast it > > that interface, it should fail but it doesn't. > > > > If that's how interfaces work. Then casting it as IUIComponent > > interface should have worked too. > > > > --- In flexcoders@yahoogroups.com, "Mike Krotscheck" <mkrotscheck@> > > wrote: > > > > > > UIComponent doesn't have a property called isClosed, therefore your > > > attempt to access that property on an instance cast to UIComponent > will > > > throw an error. What you need to do is have each class implement an > > > interface called IClosable or something along those lines, and cast to > > > that. > > > > > > public function checkDoor(c:IClosable):Boolean > > > { > > > return c.isClosed; > > > } > > > > > > > > > Michael Krotscheck > > > > > > Senior Developer > > > > > > > > > > > > RESOURCE INTERACTIVE > > > > > > <http://www.resource.com/> www.resource.com > <http://www.resource.com/> > > > > > > mkrotscheck@ <mailto:mkrotscheck@> > > > > > > > > > > > > ________________________________ > > > > > > From: flexcoders@yahoogroups.com > [mailto:[EMAIL PROTECTED] On > > > Behalf Of dsds99 > > > Sent: Tuesday, February 19, 2008 4:54 PM > > > To: flexcoders@yahoogroups.com > > > Subject: [flexcoders] Polymorphism....? > > > > > > > > > > > > I have 2 unrelated classes that extend UIComponent ultimately..;) > > > and each class implements a boolean property called "isClosed" > > > > > > Passing these classes into the function as untyped. > > > > > > If I don't cast, it works. Trying to understand why it doesn't work > > > this way. > > > > > > A compile time error occurs in the if statement. But isn't this where > > > polymorphism kicks in even though I am casting it to a higher class in > > > the chain. > > > > > > public function checkDoor(c:*):void{ > > > if((c is UIComponent).isClosed == true){ > > > trace("opened"); > > > } > > > } > > > > > > > > > > > > > > > > > > > > > We support privacy and confidentiality. Please delete this email if it > > > was received in error. > > > > > > What's new :: > > > Capitalize on the social web | The Open Brand, a new book by Kelly > > > Mooney and Dr. Nita Rollins, available March 2008 | > www.theopenbrand.com > > > > > >