\b;Keyword \c;extends\n; This keyword is used in a \c;\l;class\u cbot\class;\n; definition when we want the class to inherit members from another class. The class which is extended we usually call a parent or base, the extending class we call a child. \t;Example \c; \s;public class Parent \s;{ \s; void foo() \s; { \s; message("foo"); \s; } \s;} \s; \s;public class Child extends Parent \s;{ \s; void bar() \s; { \s; message("bar"); \s; } \s;} \s; \s;extern void object::Test() \s;{ \s; Child child(); \s; child.foo(); // Will show "foo" \s; child.bar(); // Will show "bar" \s;} \n; \b;Inherited Members Only \c;\l;public\u cbot\public;\n; and \c;\l;protected\u cbot\protected;\n; members are inherited. \c;\l;private\u cbot\private;\n; members are directly inaccessible even for a child, although they can be accessed indirectly through inherited methods. Constructors and destructors are not inherited, however, they can be overriden. \b;Method Overriding Inherited methods can be overriden (redefined) in the child class definition. Example: \c; \s;public class Parent \s;{ \s; void foo() \s; { \s; message("foo"); \s; } \s;} \s; \s;public class Child extends Parent \s;{ \s; void foo() \s; { \s; message("bar"); \s; } \s;} \s; \s;extern void object::Test() \s;{ \s; Child child(); \s; child.foo(); // Will show "bar" \s;} \n; A parent's method can be called inside an overriden method by using the \c;\l;super\u cbot\super;\n; keyword. \b;Polymorphism \c;\l;Reference\u cbot\pointer;\n; of type Parent can point to an object of type Child. However, such a pointer can't be used to access a child member. In order to access a child member, it must be assured that the Parent reference really points to a Child object. If that's the case, it can be safely copied to a pointer of type Child, which has access to the child members. \t;Example \c; \s;public class Parent \s;{ \s; void foo() \s; { \s; message("foo"); \s; } \s;} \s; \s;public class Child extends Parent \s;{ \s; void foo() \s; { \s; message("bar"); \s; } \s; void bar() \s; { \s; message("foo bar"); \s; } \s;} \s; \s;extern void object::Test() \s;{ \s; Parent people[2]; \s; people[0] = new Parent(); \s; people[1] = new Child(); \s; for (int i = 0; i < 2; ++i) \s; { \s; people[i].foo(); \s; } \s; //people[1].bar(); // Error \s; Child child = people[1]; \s; child.bar(); // OK \s;} \n; \b;Multiple Inheritance A child cannot have multiple parents, however, a parent can have many children. \t;See also \c;\l;class\u cbot\class;\n;, \c;\l;public\u cbot\public;\n;, \c;\l;private\u cbot\private;\n;, \c;\l;protected\u cbot\protected;\n;, \c;\l;new\u cbot\new;\n;, \c;\l;reference\u cbot\pointer;\n;, \c;\l;this\u cbot\this;\n;, \c;\l;super\u cbot\super;\n; \l;Programming\u cbot;, \l;types\u cbot\type; and \l;categories\u cbot\category;.