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]