The following table shows some similarities and differences in features and the use of terms
and concepts in Smalltalk, C++, and Java.
OO Concept/syntax |
Smalltalk |
C++ |
Java |
Abstract class |
Concept exists, no mechanism for enforcement |
A class with a pure virtual function can't be instantiated |
Classes may be declared abstract |
Assignment operator |
:= |
= |
= |
Character constant |
$c |
'c' |
'c' |
Class |
Class |
Class |
Class |
Class method (corresponds to a message sent to the class rather than an instance) |
Class method |
Static function member |
Class (or static) method |
Class variable (data associated with the class, not an instance) |
Class variable |
Static data member |
Class field |
Comment |
"Comment" |
// Comment
/* Comment */ |
// Comment
/* Comment */
/** Javadoc Comment **/ |
Dynamic binding |
Unrestricted |
Only subclasses of the declared class |
Subclasses of the declared class or implementations of the declared interface |
Equality test (see also identity test) |
= |
== |
equals() |
Finalization of instances before deletion (e.g., to release operating system resources) |
Some implementations support finalize method |
Destructor function |
finalize method is standard |
Garbage collection (automatic memory management) |
Garbage collection is standard |
No garbage collection - programmer explicitly manages memory |
Garbage collection is standard |
Identity test (see also Equality test) |
== |
same as equality |
== |
Inheritance |
Single inheritance only |
Multiple inheritance |
Single inheritance only |
Initialization of instances |
Override new method |
Constructor function |
Constructor function |
Instance data or state |
Instance variable |
Data member |
Instance field |
Interface contract (specifies the public interface to classes that implement it) |
No corresponding construct |
No corresponding construct |
Interface |
Message |
Message |
Member function call |
Method invocation |
Message send syntax |
anObject doIt |
anObject.doIt() (direct)
pObject->doIt() (pointer) |
anObject.doIt() |
Method |
Method |
Member function |
Method |
Method argument syntax |
methodName: argument (keyword method) |
memberFunctionName(argument) |
methodName(argument) |
Method return |
^ (caret) |
return |
return |
Object (root of all classes) |
Class Object |
No corresponding class |
Class Object |
Operator overloading (an aspect of polymorphism; different operator behavior based on receiver type) |
Any operator can be overloaded |
Any operator can be overloaded |
Only methods can be overloaded, not built-in operators such as +, - , * |
Pointers |
No explicit storage pointers |
Explicit use of storage pointers and pointer arithmetic |
No explicit storage pointers |
Self (the object executing a method) |
self |
this (usually not written) |
this (usually not written) |
String constant |
'string constant' |
"string constant" |
"string constant" |
Subclass |
Subclass |
Derived class |
Subclass |
Superclass |
Superclass |
Base class |
Superclass |
Superclass method invocation |
super |
:: (scoping operator, more general than Smalltalk or Java capability) |
super() |
|