Transcript Objects
Applications Development
Objects in Java
Key concepts and metaphors
Implicit subclassing
Static methods
Constructors
Instance variables
Dangers of uninitialised object references
[email protected]
Applications Development
Metaphors - inheritance
A small UK company (Watsonian Squire Ltd)
imports “Royal Enfield” motorcycles from India
where they are still in production
The basic design has not changed
substantially since 1949!
The UK company does two things:
checks the imported bikes and sells them on
directly
or modifies the bikes into “Clubman” and “Trailie”
styles by changing some components
[email protected]
Applications Development
Metaphors - inheritance
The company obtains an instance of a “basic
motorcycle” superclass object and can use it
directly…
or it can subclass the object and “override” a
feature by providing a new or modified part or
function
This would not be possible without the
cooperation of the Indian factory. The style of
the motorcycle is not final.
[email protected]
Applications Development
What about a simple object?
To subclass we do this:
public class Spoon extends Cutlery { .. }
But what does this do?
public class TaxCalcLib { … }
Any class definition with no explicit extends
clause is inheriting from java.lang.Object
This provides the bare minimum framework
for a class to function
[email protected]
Structure of a simple class
import java.net.*;
public class HostName
{ public static void main(String[] args)
{
InetAddress iaLocal;
try
{
iaLocal = InetAddress.getLocalHost();
System.out.println(“Name:" + iaLocal.getHostName());
}
catch (UnknownHostException e)
{
System.err.println("Don't know about local host");
System.exit(0);
}
}
} // end of class HostName
Applications Development
Static methods
Note that the example program is part of an
object called “HostName”
Thus the filename must be HostName.java
But how does the object get instantiated?
Surprise - it doesn’t!
The example uses a static method (code
that’s part of the class, not the object)
[email protected]
Object instantiation
public class Egg
{ private String myColour;
public Egg(String sEggColour)
{
myColour = sEggColour;
}
public Egg()
{
myColour = “Orange”;
}
public static void main(String[] args)
{
Egg e1 = new Egg(“Green”);
Egg e2 = new Egg();
Egg e[] = new Egg[6];
…
}
} // end of class Egg
// NB no return type!
// NB no return type!
// create some objects…
// what colour is this?
// no objects created here!
Applications Development
Constructors
A “constructor” is an initialisation method
It runs when a new object is created
A class may define many object constructors
Each constructor differs only in its input
parameters
All methods can have multiple “flavours”
However, unlike other methods, constructors
have no return type
[email protected]
public class Egg
{ private String myColour;
// each instance gets its own copy
public Egg(String sEggColour)
{
myColour = sEggColour;
}
public Egg()
{
myColour = "Orange";
}
public void reportColour()
{
System.out.println(myColour);
}
public static void main(String[] args)
// static – all eggs share this
{
Egg e1 = new Egg("Green");
// green egg
Egg e2 = new Egg();
// orange egg
Egg e[] = new Egg[6];
// six references to eggs
// …
e1.reportColour();
// should be green
e2.reportColour();
// should be orange
e[0].reportColour();
// runtime error – no eggs here yet
}
} // end of class Egg
Applications Development
Comment on the examples
The idea of using a static method of a class to
instantiate objects of the same type is
common practice (e.g. in small programs, for testing)
It seems counter-intuitive to some people
A clear separation between the concepts of
static, class-based code and
dynamic, object-based code
…helps us gain a better perspective
[email protected]
Applications Development
Conclusion
We have seen:
some of the concepts and language
associated with object-orientation
some practical issues of program structure,
including the use of static methods
constructors and their use
[email protected]