Re: Newbie on Inheritance, Base classes and derived classes
Hi Andy,
You seem to have grasped the inheritance. In fact any derived class can be referred to as the parent class (assuming the parent isn't abstract). No cast is needed.
Watch w = new DigitalWatch();
Only methods defined in Watch will be visible to w.
Furthermore, objects retain knowledge of what they really are so you can cast this Watch back to DigitalWatch if needed.
DigitalWatch d = (DigitalWatch)w;
Considering a list of digital and analog watches.
ArrayList list = new ArrayList();
list.Add(new DigitalWatch());
list.Add(new AnalogWatch());
list.Add(new DigitalWatch());
list.Add(new DigitalWatch());
list.Add(new AnalogWatch());
You can then do
foreach(Watch w in list)
{
w.SetTime();
}
If you need different ways to set time for analog and digital watches, you can mark the base method virtual and override them in the inherited classes. Watch.SetTime would then either call DigitalWatch.SetTime or AnalogWatch.SetTime even if you use a base class reference.
In an external class, for instance in a button click event:
Watch w = new Watch();
w.DoStuff();
w = new DigitalWatch();
w.DoStuff();
w = new AnalogWatch();
w.DoStuff();
class Watch
{
protected virtual void SetTime(DateTime time){MessageBox.Show("Watch");}
public void DoStuff(){SetTime(DateTime.Now);}
}
class DigitalWatch : Watch
{
protected override void SetTime(DateTime time){MessageBox.Show("Digital");}
void ChangeBattery(){}
}
class AnalogWatch : Watch
{
void SetTime(DateTime time){MessageBox.Show("Analog");}
void WindUp(){}
}
It will output Watch-Digital-Watch since AnalogWatch does not override SetTime, calling DoStuff will use the base DoStuff method, and this method will then use the base SetTime method.
In addition to calling common base class methods you can implement interfaces and use a common interface to call on interface methods.
On Tue, 21 Jun 2005 13:12:58 +0200, aaj <aaj@xxxxxxx> wrote:
Hi all
I'm new to OOP and just getting to grips with inheritance.
Could anyone tell me if my understanding so far is correct.....?
If I have a base class, and then some derived classes with extra
functionality e.g.
Base Class : Watch Method SetTime
Derived Class : DigitalWatch Method ChangeBattery
Derived Class : AnalogWatch Method WindUp
is it acceptable to use the base class type to access the SetTime method in
all the watches and then in the same app to use the derived class type for
only digital watches
so in one place use
Watch CurrentWatch = (watch) AndysDigitalWatch; i.e. casting Digital watch
as a base type watch and only seeing the SetTime Method
and in another place use
DigitalWatch CurrentWatch = AndysDigitalWatch;
obviously it wouldn't be exactly like this, I'm thinking more when using
foreach on the base class object, bringing back all the watches derived from
the base class, but only the methods common to the base class and the
derived class.
So in summary, I guess what I'm asking is - is it acceptable to declare
types of Base class to do some functions common to all objects, and in the
same app, but in a different place, use the more specialised derived classes
thanks
Andy
--
Happy coding!
Morten Wennevik [C# MVP]
.