Inheritance/Single: Difference between revisions

m
added whitespace and bullets.
m (added whitespace and bullets.)
Line 3:
[[Category:Type System]]
[[Category:Encyclopedia]]
:''This task is about derived types; for implementation inheritance, see [[Polymorphism]].
 
::: ''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
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:
* 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.
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.
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]].
 
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]].
 
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'''.
'''Task'''::: Show a tree of types which inherit from each other. 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:
 
 
The tree should look like this:
'''Task''': Show a tree of types which inherit from each other. 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. None of the classes need to have any functions, the only thing they need to do is inherit from the specified superclasses (overriding functions should be shown in [[Polymorphism]]). The tree should look like this:
<pre> Animal
Animal
/\
/ /\
/ / \
/ \
Dog Cat
Dog Cat
/\
/\
/ \
/ \
/ \
/ \
Lab Collie</pre>
Lab Collie
</pre>
<br><br>
 
=={{header|11l}}==