Java Reference
In-Depth Information
Chapter 2. The Type System
If I had to pick a single best part of the Java programming language, it would be the type sys-
tem. Like many other parts of the language, there is nothing new to the type system. Every
object is an instance of a type, and those types are determined by the class of the object and the
interfaces that the class implements. An object actually is an instance of many types (hence
the notion of a polymorphic type system). This polymorphic aspect of objects allows many of
the patterns that have become so popular to work, as we can write code that uses the proper-
ties of objects of one type and then manipulate objects that are at least of that type (but may
also be an instance of some other type). After working with the Java language for more than
a decade, we tend to take the type system for granted, or worse yet, notice it only when it gets
in the way. But if we think about it, the type system in Java is a paradigmatic example of what
makes the language what it is—a pragmatic combination of features that provide an excellent
tool for software engineers building large, complex systems.
The Basics
The basics of the type system are simple to explain (which by itself is a positive feature).
Every object in a Java program is an instance of a class . The class defines the internal data
layout for the object and defines a set of methods that can be called on the object. The class
also associates code with each of these methods, allowing that code to manipulate the data in
the object. A class can extend another class, in which case it inherits all of the data and meth-
ods of the class that it extends. A class also inherits the implementations of the methods of a
class it extends, or a new implementation can be supplied that overrides the inherited imple-
mentation. The relationship of extending forms a tree in which all classes can be located. The
root of that tree is the class Object , which all other classes extend (either directly or indirec-
In Java, a class may extend only one other class. This means that Java is a single-inheritance
language, at least as far as the types defined by classes are concerned. This might not be as
great a limitation as some have thought. Arguments have been put forward that anything that
can be done with multiple inheritance can be done just as well (and without the complexity
of multiple inheritance) using single inheritance and delegation. [ 6 ] Having only single inherit-
Search WWH ::

Custom Search