You said that you extended UIComponent and included isClosed property in
your classes. The problem with the code is that, in your if statement you
included ((c is UIComponent).isClosed == true. When the compiler executes c
is UIComponent the object you get is Boolean and now it will try to invoke
isClosed property on the boolean object. try modifying your code to this
> > > public function checkDoor(c:*):void{
> > > if(c is UIComponent && c.isClosed == true){
> > > trace("opened");
> > > }
> > > }

On Wed, Feb 20, 2008 at 2:12 PM, Ryan Frishberg <[EMAIL PROTECTED]> wrote:

>   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 <flexcoders%40yahoogroups.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 <flexcoders%40yahoogroups.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 <flexcoders%40yahoogroups.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 <flexcoders%40yahoogroups.com>
> > [mailto:flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>] On
> > > > Behalf Of dsds99
> > > > Sent: Tuesday, February 19, 2008 4:54 PM
> > > > To: flexcoders@yahoogroups.com <flexcoders%40yahoogroups.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
> > > >
> > >
> >
>
>  
>



-- 
Regards,
Sujit Reddy. G

Reply via email to