Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Subtyping
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Subtyping schemes == Type theorists make a distinction between '''[[nominal type system|nominal subtyping]]''', in which only types declared in a certain way may be subtypes of each other, and '''[[structural type system|structural subtyping]]''', in which the structure of two types determines whether or not one is a subtype of the other. The class-based object-oriented subtyping described above is nominal; a structural subtyping rule for an object-oriented language might say that if objects of type ''A'' can handle all of the messages that objects of type ''B'' can handle (that is, if they define all the same [[Method (computer science)|method]]s), then ''A'' is a subtype of ''B'' regardless of whether either [[inheritance (object-oriented programming)|inherits]] from the other. This so-called ''[[duck typing]]'' is common in dynamically typed object-oriented languages. Sound structural subtyping rules for types other than object types are also well known.{{citation needed|date=June 2012}} Implementations of programming languages with subtyping fall into two general classes: ''inclusive'' implementations, in which the representation of any value of type ''A'' also represents the same value at type ''B'' if ''A'' <: ''B'', and ''coercive'' implementations, in which a value of type ''A'' can be ''automatically converted'' into one of type ''B''. The subtyping induced by subclassing in an object-oriented language is usually inclusive; subtyping relations that relate integers and floating-point numbers, which are represented differently, are usually coercive. In almost all type systems that define a subtyping relation, it is reflexive (meaning ''A'' <: ''A'' for any type ''A'') and transitive (meaning that if ''A'' <: ''B'' and ''B'' <: ''C'' then ''A'' <: ''C''). This makes it a [[preorder]] on types.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)