RosettaCodeData/Task/Inheritance-Single/00-TASK.txt

61 lines
2.4 KiB
Plaintext

::: ''This task is about derived types;   for implementation inheritance, see [[Polymorphism]].
Inheritance is an operation of [[type algebra]] that creates a new type from one or several parent types.
The obtained type is called '''derived type'''.
It inherits some of the properties of its parent types.
Usually inherited properties are:
:::*   methods
:::*   components
:::*   parts of the representation
The [[classes | class]] of the new type is a   '''subclass'''   of the classes rooted in the parent types.
When all (in certain sense) properties of the parents are preserved by the derived type,   it is said to be a [[wp:Liskov_substitution_principle|Liskov subtype]].
When properties are preserved then the derived type is ''substitutable'' for its parents in all contexts.   Usually full substitutability is achievable only in some contexts.
Inheritance is
:::*   '''single''', when only one parent is allowed
:::*   '''[[multiple inheritance | multiple]]''', otherwise
Some single inheritance languages usually allow multiple inheritance for certain [[abstract type]]s, interfaces in particular.
Inheritance can be considered as a relation parent-child.
Parent types are sometimes called '''supertype''', the derived ones are '''subtype'''.   This relation is [[wp:Transitive_relation|transitive]] and [[wp:Reflexive_relation|reflexive]].
Types bound by the relation form a [[wp:Directed_acyclic_graph directed acyclic graph]] (ignoring reflexivity).
With single inheritance it becomes a [[wp:Tree_(graph_theory)|tree]].
;Task:
Show a tree of types which inherit from each other.
:::   At the top of the tree should be a class called   '''Animal'''.
:::   The second level should have '''Dog''' and '''Cat'''.
:::   Under   '''Dog'''   should be   '''Lab'''   and   '''Collie'''.
::: &nbsp; None of the classes need to have any functions, &nbsp; the only thing they need to do is inherit from the specified superclasses <br> &nbsp; (overriding functions should be shown in [[Polymorphism]]).
The tree should look like this:
<pre>
Animal
/\
/ \
/ \
Dog Cat
/\
/ \
/ \
Lab Collie
</pre>
<br><br>