Download Week 3 Power Point Slides

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
POLYMORPHISM

Definition: Accessing child class methods
through a parent object
 Example:
Child class overrides default parent class
methods
 Example: Child class fills in methods left blank in
the parent’s class

Reserved Words
 implements,
interface: Multiple-inheritance
 abstract: Class with some methods left blank
INHERITANCE

Inheritance allows
 Programs
to make use of parent class methods
 A degree of polymorphism when the parent class
has a default version of a method to be overridden

Limitations
 Programs
can only extend a single class
 There is no accounting for methods for which there
is not a version in the parent class
Note: Java’s use of inheritance providing limited polymorphism is
not universal. C++, for example, always calls parent class methods,
even if they are overridden.
DESIGN ISSUES

When there are multiple levels of inheritance
The classes at the top of the hierarchy are more and
more general
 Child classes become more specific to the application


Issues to address
Anticipating methods that all child classes must include
(reserved word abstract)
 Providing categories of methods that classes of a
particular category must include (reserved words
interface and implements)

Circle
UML EXAMPLE
Object
GeoMetric Object
-color: Color
-filled: boolean
+getColor(): Color
+setColor(color: Color): void
+isFilled(): boolean
+findArea(): double
+findPerimeter(): double
-radius: double
+getRadius(): double
+setRadius(radius: double): void
Cylinder
-height: double
+getHeight(): double
+setHeight(height: double): void
+findVolume(): double
Rectangle
-width: double
-height: double
-private, + public, # protected
-How does GeometricObject code
findArea and findPerimeter
+getWidth(): double
+setWidth(width: double): void
+getHeight(): double
+setHeight(double: height): void
ABSTRACT CLASSES
Definition: Some methods are left to implement in child classes
Note: Parent abstract classes, with empty methods, can’t be instantiated
public abstract class GeometricObject
{ private Color color;
protected GeometricObject() {}
protected GeometricObject(Color color) { this.color = color; }
public String getColor()() { return color; }
public void setColor(String color) { this.color = color; }
public boolean isFilled() { return color==null; }
public abstract double findArea();
public abstract double findPerimeter();
}
Note the semicolon at the end of the abstract methods (meaning no body)
CHILD CLASSES OF ABSTRACT PARENTS

In Circle
public double findArea() { return radius * radius * Math.PI; }
public double findPerimeter( return 2 * radius * Math.PI; }

In Rectangle
public double findArea() { return width * height; }
public double findPerimeter( 2 * (width + height); }

In Cylinder
public double findArea()
{ return 2 * (super.findArea() + getRadius() * Math.PI * height; }
public double findVolume() { return super.findArea() * height; }
ABSTRACT CLASS RULES
Any class with abstract methods must also be
declared to be abstract
 A class with no abstract methods can be declared
to be abstract
 Any class declared abstract cannot be instantiated
 A child class of a concrete (not abstract) parent
can be declared abstract
 Consider: abstract class Test {}

Legal: Test test;
 Illegal: Test test1 = new Test();

INTERFACE
Definition: A class-like construct consisting of
constants and method signatures
 Syntax:

modifier interface interfaceName
{ *** constant declarations ***
*** method signatures ***
}

Usage:
public class myClass implements interface1, … , interfaceN
INTERFACE MODIFIERS

Most interfaces are public



Illegal
private interface Foo{ }
protected interface Bar{ }
Legal
public class Enclosing
{ private interface Foo{ }
protected interface Bar{ }
}
Interface member scope


variables are public final static
methods are public
Note:
public interface T
{ public static final int x=1;
public abstract void p();
}
Is equivalent to:
public interface T
{ int x = 1;
void p();
}
INTERFACE VERSES ABSTRACT

abstract class advantages over interfaces
abstract classes can have methods with bodies
 abstract classes can have non-constant variables
 abstract classes allows protected, private scope
 Abstract classes inherit from the Object class


Interface advantages over abstract classes
A class can implement more than one interface
 An interface can extend more than one parent interface
 Interfaces do not inherit from a root Object


Both abstract classes and interfaces allow

Interface or abstract class names are valid types
TYPE DECLARATION EXAMPLE
public class S extends P
{ public static void main(String[] args)
{
S s = new S();
P p;
Q q;
R r;
p = s; q = s; r = s;
} }
interface Q {}
interface R {}
abstract class P implements Q, R {}
IMPLEMENTS AND EXTENDS EXAMPLE
face5
face2
face1
Object
face3
Class1
face4
Class2
public class Class2 extends Class1 implements face4, face5 {}
abstract class Class1 implements face3 {}
interface face1 {}
interface face2 {}
interface face3 extends face1, face2 {}
interface face4 extends face3 {}
interface face5 {}
CUSTOM INTERFACE
Output
Nuggets
Apple Cider
public class TestEdible
{ public static void main(String[] args)
{ Object[] objs = {new Tiger(), new Chick(), new Apple() };
for (int i=0; i<objs.length; i++)
if (objs[i] instanceof Eat) System.out.println(((Eat)objs[i]).how());
} }
interface Eat { public String how(); }
class Fruit implements Eat {public String how() { return "Eat Fresh";} }
class Apple extends Fruit { public String how() { return "Apple Cider"; } }
abstract class Animal {}
class Tiger extends Animal {}
class Chick extends Animal implements Eat
{ public String how() { return "Nuggets"; } }
JAVA COMPARABLE INTERFACE
package java.lang;
public interface Comparable { public int compareTo(Object o); }
public class Max
{ public static Object max(Object o1, Object o2)
{
if (((Comparable)o1).compareTo(o2) > 0) return o1;
else return o2; } }
public class CompareRect extends Rectangle implements comparable
{ public CompareRect(double width, double height) { super(width, height); }
public int compareTo(Object o)
{ return findArea() - ((CompareRect)o).findArea()); }
}
JAVA “SHALLOW” CLONEABLE INTERFACE
public class House implements Cloneable
{
public GregorianCalendar built;
public House(GregorianCalendar b) { built=b; }
public Object clone()
{ try { return super.clone(); }
catch (CloneNotSupportedException ex) { return null; }
}
public static void main(String[] args)
{ House h1 = new House( new GregorianCalendar(35, 11, 10) );
House h2 = (House)h1.clone();
h2.built.set(50, 2, 20);
System.out.println(
h1.built.get(Calendar.YEAR) + " " + h2.built.get(Calendar.YEAR));
}
}
Output: 50 50 because addresses, not contents , of built copied
JAVA “DEEP” CLONEABLE INTERFACE
Modify the cloneable method from the previous slide
public Object clone()
{ try
{ House house = (House)super.clone();
house.built = new GregorianCalendar(
built.get(Calendar.YEAR),
built.get(Calendar.MONTH),
built.get(Calendar.DAY_OF_MONTH));
return house;
}
catch (CloneNotSupportedException ex) { return null; }
}
Output: 35 50 because we cloned the instance variable
Alternative: house.built = (GregorianCalendar)built.clone();
Many Java API classes implement “deep” clone operations
WRAPPER CLASSES



Definition: A class that adds functionality to a primitive
variable or another class
Examples: Double, Float, Long, Integer, Short, Byte,
Character, Boolean
Additional functionality:



Implements Comparable for Java’s generic sort capabilities
Parses strings into primitive types (Integer.parseInt("32");
Java’s default conversions to and from primitive variables.
int x = Integer.parseInt("1A", 16); sets x to 26
Integer intObject = 2;
BOXING AND UN-BOXING



Definition: Automatic conversion from a primitive variable to its
wrapper
Definition: Un-boxing is the automatic conversion from a
wrapper object to its primitive variable counterpart
Examples:
 Integer x = 3; // Boxing
 int x = Integer(3); // Unboxing
 double d = Double.valueOf(“93.55”); // Unboxing
 String h = (Double.valueOf("23.4")).toString();
(The toString method of Double is called)
WRAPPER CLASS UML EXAMPLE
Java.lang.Number
Java.lang.Integer
+byteValue(): byte
+shortValue(): short
+intValue(): int
+longValue(): long
+floatValue(): float
+doubleValue(): double
-value: int
+MAX_VALUE: int
+MIN_VALUE: int
Java.lang.Comparable
+compareTo(o: Object): int
+Integer(vallue: int)
+Integer(s: String)
+valueOf(s: String): Integer
+valueOf(s: String, radix:int): Ingeter
+parseInt(s: String): int
+parseInt(s: String, radix: int): int
Related documents