In all object oriented languages, you have a facility called
inheritance where you can define one type of thing ("class of object") based on another, and the newly defined class ("subclass" or "extended class") takes the initial ("base") class as it starting point.
In your code for your base class, you'll have some logic which sets up new objects (a "constructor" method), and you'll have code in your extended classes through which you set up objects of that extended type. Almost inevitably, your extended objects will be pretty similar to your basic objects but they'll have a few extras, and so the writers of Object Oriented languages provide you with a way of calling the
base class constructor within (or before) your
extended class constructor. The base class is sometimes called the parent class. Let me translate that into an example in plainer English.
"A Train journey is a specialised type of public transport journey. If you're setting up a train journey, you'll want to set up a regular public transport journey within it first, with attributes like where it goes from and to, and at what time and who runs it. Then you will add some train extras such as how many carriages long it is"
How does this work in C++?
Train::Train(int nvh, int vhc, int xtrwa ) : PubT(nvh, vhc) {
tronly = xtrwa;
}
A Train is a PubT. When you create a train (with three parameters), you create first a PubT passing the first two parameters in to it, and them you perform the extra actions in the code block - which is saving the third parameter.
Course -
C++ Programming
How does this work in Java?
public Train (int nvh, int vhc, int xtrwa) {
super (nvh,vhc);
this.tronly = xtrwa;
}
How does this work in Python?
def __init__(self,nvh,vhc,xtrwa):
pubt.__init__(self,nvh,vhc)
self.tronly = xtrwa
Course -
Python Programming
This is old style classes; in new style classes, you'll call parent on the current class to avoid having to state the name of the parent class within the extended class definition.
How does this work in Perl?
In Perl, you "roll you own" ... it's so flexible and there are so many options it's almost untrue! Here's an example:
sub new {
my ($self,$nvh,$vhc,$xtrwa) = @_;
my $cc = new pubt($nvh,$vhc);
$cc->{"tronly"} = $xtrwa;
bless \%{$cc};
}
Course -
Perl for Larger Projects
How does this work in [incr-Tcl]?
constructor {nvh vhc xtrwa} {
pubt::constructor $nvh $vhc } {
set tronly $xtrwa
}
}
Course -
Tcl Basics and please let us know when you book that you would like us to add in strong coverage of Incr-Tcl
How does this work in PHP?
public function __construct($nvh, $vhc, $xtrwa) {
parent::__construct($nvh, $vhc);
$this->tronly = $xtrwa;
}
This example is for PHP 5. If you're still using PHP version 4, you'll call your constructor the same name as the name of the class, and call the base class constructor via the class name.
Course -
Object Oriented PHP
def initialize(nvh, vhc, xtrwa)
super(nvh, vhc)
@tronly = xtrwa
end
How does this work in Lua?
Lua is a small language which provides you with facilities through which you can write OO like code but it is not strictly objects. You can set the metatable of a table [object] to the metatable of the table which you wish to be the parent, then modify it - thus emulating the facility that I'm talking about in this article.
Course -
Lua Programming (written 2008-10-03 07:13:33)
Associated topics are indexed under
G997 - Well House Consultants - Newsletter Lead Articles [2538] Open Source Training Centre and Courses for 2010 - (2009-12-16)
[2425] Weekend and Christmas Promotion - Well House Manor Hotel, Melksham - (2009-09-26)
[2370] C++, Python, and other training - do we use an IDE - (2009-08-21)
[2253] Walks in and around Melksham, Wiltshire - (2009-06-21)
[2119] Make your business a DESTINATION business - (2009-04-05)
[2052] How was my web site compromised? - (2009-02-24)
[1912] Book now for 2009 - (2008-11-29)
[1754] Upgrade from PHP 4 to PHP 5 - the TRY issue - (2008-08-15)
[1663] Python in an afternoon - a lecture for experienced programmers - (2008-06-01)
[1600] Cambidge - Tcl, Expect and Perl courses - (2008-04-04)
[1545] Letting new visitors know we provide training courses - (2008-02-19)
[1488] New trainee laptop fleet for our Open Source courses - (2007-12-30)
[1386] New software product for warmblooded programmers - (2007-10-10)
[1318] Well House Manor - feature comparison against the old place! - (2007-08-24)
[1224] Object Relation Mapping (ORM) - (2007-06-09)
[1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
[1065] Graham Ellis - an Introduction - (2007-02-05)
[1000] One Thousand Posts and still going strong - (2006-12-18)
C233 - C and C based languages - OO in C++ - beyond the basics [2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)
[1674] What a lot of files! (C++ / Polymorphism demo) - (2008-06-12)
[1572] C - structs and unions, C++ classes and polymorphism - (2008-03-13)
[1217] What are factory and singleton classes? - (2007-06-04)
[925] C++ - just beyond the basics. More you can do - (2006-11-14)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[801] Simple polymorphism example - C++ - (2006-07-14)
[798] References and Pointers in C++ - (2006-07-10)
C234 - C and C based languages - Further C++ Object Oriented features [2673] Multiple Inheritance in C++ - a complete example - (2010-03-12)
[2576] What does const mean? C and C++ - (2010-01-15)
[2004] Variable Scope in C++ - (2009-01-22)
[1159] It can take more that one plus one to get two. - (2007-04-22)
[802] undefined reference to typeinfo - C++ error message - (2006-07-15)
H108 - Objects in PHP [2680] Static class members in PHP - a documented example - (2010-03-16)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2632] Shipping a test harness with your class in PHP - (2010-02-12)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
[2380] Object Oriented programming - a practical design example - (2009-08-27)
[2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
[2171] Cleaning up redundant objects - (2009-05-11)
[2169] When should I use OO techniques? - (2009-05-11)
[2160] PHP - getclass v instanceof - (2009-05-07)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[1820] Sorting objects in PHP - (2008-10-04)
[1682] Accounts in PHP - an OO demo - (2008-06-19)
[1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
[1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
[1027] Cue the music, I'm happy. - (2007-01-09)
[836] Build on what you already have with OO - (2006-08-17)
[720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
[421] Don't repeat code - use loops or functions - (2005-08-21)
[343] Should I use structured or object oriented? - (2005-06-10)
[205] PHP5 lets you say no - (2005-02-07)
[124] PHP v Java - (2004-11-20)
[67] Object Oriented Programming in PHP - (2004-09-29)
J710 - Java - Extending Classes and More [2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
[2185] Abstract Classes - Java - (2009-05-16)
[1556] Java - a demonstration of inheritance on just one page - (2008-02-26)
[1538] Teaching Object Oriented Java with Students and Ice Cream - (2008-02-12)
[1501] Java - using super to call a method in the parent class - (2008-01-10)
[1294] An example of Java Inheritance from scratch - (2007-08-00)
[1066] Final, Finally and Finalize - three special words in Java - (2007-02-05)
P218 - Perl - More Objects [2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
[2427] Operator overloading - redefining addition and other Perl tricks - (2009-09-27)
[1949] Nuclear Physics comes to our web site - (2008-12-17)
[1665] Factory method example - Perl - (2008-06-04)
[1664] Example of OO in Perl - (2008-06-03)
[1435] Object Oriented Programming in Perl - Course - (2007-11-18)
[1320] Perl for Larger Projects - Object Oriented Perl - (2007-08-25)
[930] -> , >= and => in Perl - (2006-11-18)
[592] NOT Gone phishing - (2006-02-05)
[588] Changing @INC - where Perl loads its modules - (2006-02-02)
[531] Packages in packages in Perl - (2005-12-16)
[246] When to bless a Perl variable - (2005-03-15)
[227] Bellringing and Programming and Objects and Perl - (2005-02-25)
T245 - Tcl/Tk - [incr-Tcl] [1528] Object Oriented Tcl - (2008-02-02)
[290] Object Orientation in Tcl - [incr-Tcl] - (2005-04-24)
U107 - Object Orientation - the Lua way [2455] Lua examples - coroutines, error handling, objects, etc - (2009-10-15)
[2359] A fresh example - objects the Lua way - (2009-08-13)
[2318] For Lua Programmers AND for Town Planners - (2009-08-02)
[1743] First class functions in Lua lead to powerful OO facilities - (2008-08-07)
[1699] If you are learning Lua, here are some more examples - (2008-07-06)
[1692] Towards Object Oriented Programming in Lua - (2008-06-30)
Y112 - Python - Objects - Intermediate [2485] How do I set up a constant in Python? - (2009-10-31)
[2409] TypeError: super() argument 1 must be type, not classobj (Python) - (2009-09-18)
[2368] Python - fresh examples of all the fundamentals - (2009-08-20)
[1661] Equality, sameness and identity - Python - (2008-05-31)
[1644] Using a utility method to construct objects of different types - Python - (2008-05-17)
[1517] Python - formatting objects - (2008-01-24)
[1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
[964] Practical polymorphism in action - (2006-12-04)
[903] Pieces of Python - (2006-10-23)
[477] Class, static and unbound variables - (2005-10-25)
[383] Overloading of operators on standard objects in Python - (2005-07-19)
[296] Using a Python dictionary as a holder of object attributes - (2005-04-30)
Some other Articles
FSB - an update.Claverton PumpAutumnCalling base class constructorsIcelandic BadgeMarc Schneider is still having email troubleHolt on holtHotel Guest SurveysJavascript/HTML example, dynamic server monitor