Scala is an object-oriented language like Java, Python, Ruby, Smalltalk, and others. If you’re coming from the Java world, you’ll notice some notable improvements over the limitations of Java’s object model.
We assume you have some prior experience with object-oriented programming (OOP), so we will not discuss the basic principles here, although some common terms and concepts are discussed in the Glossary. See [Meyer1997] for a detailed introduction to OOP; see [Martin2003] for a recent treatment of OOP principles in the context of “agile software development”; see [GOF1995] to learn about design patterns; and see [WirfsBrock2003] for a discussion of object-oriented design concepts.
Let’s review the terminology of OOP in Scala.
We saw previously that Scala has the concept of a declared
object, which we’ll
dig into in Classes and Objects: Where Are the Statics?. We’ll use the
term instance to refer to a class instance
generically, meaning either an
object or an instance
class, to avoid the potential for confusion
between these two concepts.
Classes are declared with
class. We will see later that additional
keywords can also be used, like
final to prevent
creation of derived classes and
abstract to indicate that the class can’t be
instantiated, usually because it contains or inherits member declarations
without providing concrete definitions for them.
An instance can refer to itself using ...