COP 2800
Lake Sumter State College
Mark Wilson, Instructor
Abstract Classes and Methods
Superclasses are created through the process called
"generalization"
• Common features (methods or variables) are factored out of
object classifications (ie. classes).
• Those features are formalized in a class. This becomes the
superclass
• The classes from which the common features were taken
become subclasses to the newly created super class
Often, the superclass does not have a "meaning" or
does not directly relate to a "thing" in the real world
• It is an artifact of the generalization process
Because of this, abstract classes cannot be instantiated
They act as place holders for abstraction
with abstract
Can not be instantiated
No constructor
Can be subclassed
Can contain concrete and abstract methods
If a class includes abstract methods, then the
class itself must be declared abstract
Cannot be declared as final
Declared
An
abstract method cannot be contained in a
non-abstract class
If a subclass of an abstract superclass does not
implement all the abstract methods, the
subclass must be declared abstract.
A non-abstract subclass extended from an
abstract class must implement all the abstract
methods, even if they are not used in the
subclass
A subclass can be abstract even if its
superclass is concrete
Has a signature but no implementation
Is a placeholder.
• Method must exist
• No meaningful implementation within this class
Any class which contains an abstract method MUST
also be abstract
Any class which has an incomplete method
definition cannot be instantiated (ie. it is abstract)
If a method can be implemented within an abstract
class, and implementation should be provided
with abstract
No implementation
No braces, semicolon after the parameter list
Must be implemented (overridden) by a
subclass
An abstract method cannot be defined as
final or static
Declared
Shape
-positionX : int
-positionY : int
+move()
+draw()
+resize()
+getArea() : double
+get Perimeter() : double
Circle
-radius : double
+draw()
+resize()
+getArea() : double
+getPerimeter() : double
Rectangle
-height : double
-width : double
+draw()
+resize()
+getArea() : double
+getPerimeter() : double
Square
-side : double
+draw()
+resize()
+getArea() : double
+getPerimeter() : double
abstract class Shape {
private int positionX;
private int positionY;
public void move (int newX, int newY) {
positionX = newX;
positionY = newY;
}
abstract draw();
abstract resize();
//
// abstract
abstract double getArea();
// methods
abstract double getPerimeter(); //
}
public class circle extends Shape{
private double radius;
public void draw(){
. . .
}
public void resize(){
. . .
}
public double getArea(){
. . .
}
public double getPerimeter(){
. . .
}
}
public class ShapeShifter {
public static void main (String [] args)
{
Shape[] shapeList = {
new Circle(3.0),
new Rectangle(3.0, 4.0),
new Rectangle(2.5, 7.5),
new Circle(2.5),
new Square(5.0)
}
for (int i = 0; i < shapeList.length; i++)
{
System.out.print (shapeList[i].toString( ) + “
System.out.print (shapeList[i].area( ) + “
”);
System.out.println (shapeList[i].perimeter( ));
}
}
}
”);
Interfaces
Polymorphism
Multiple
inheritance, sort of
Class only extends a single superclass but,
implements as many interfaces as it needs
Interfaces can cross class hierarchies
Special
case of abstract class
Declares abstract methods therefore no
implementations
Can define constants (final)
Defines a usage contract between classes
By definition public
By definition abstract
A
class can implement multiple interfaces: the
interfaces are listed in the implements clause,
separated by commas
A class that implements an interface, must
define all methods in the interface
A class that implements an interface can
implement other methods as well
public interface Doable
{
public static final String
NAME;
void doThis();
int doThat();
void doThis2 (float value,
char ch);
boolean doTheOther (int
num);
}
public class Something
implements Doable
{
public void doThis(){
// whatever
}
public void doThat(){
// whatever
}
// etc.
}
Human
Philosopher
+speak()
+pontificate()
Animal
Speaker
+speak()
Dog
+speak()
public interface Speaker {
public void speak();
}
class Philosopher extends Human
implements Speaker {
public void speak() {…}
public void pontificate() {…}
}
class Dog extends Animal
implements Speaker {
public void speak() {…}
}
Speaker guest;
guest = new Philosopher();
guest.speak();
guest = Dog();
guest.speak();
Speaker special;
special = new Philosopher();
special.pontificate(); // compiler error
Speaker special;
special = new Philosopher();
((Philosopher)special).pontificate();
You can write methods that work with more than one class
• interface RuleSet {
boolean isLegal(Move m, Board b);
void makeMove(Move m);
}
Every class that implements RuleSet must have these methods
• class CheckersRules implements RuleSet { // one implementation
public boolean isLegal(Move m, Board b) { ... }
public void makeMove(Move m) { ... }
}
This assignment is legal because a rulesOfThisGame object is a
RuleSet object
• class ChessRules implements RuleSet { ... } // another
implementation
class LinesOfActionRules implements RuleSet { ... } // and another
RuleSet rulesOfThisGame = new ChessRules();
This statement is legal because, whatever kind of RuleSet object
rulesOfThisGame is, it must have isLegal and makeMove methods
• if (rulesOfThisGame.isLegal(m, b)) { makeMove(m); }
Abstract Classes:
• Can have data fields
• Methods may have an
implementation
• Classes and abstract
classes extend abstract
classes.
• Class cannot extend
multiple abstract classes
• Substitution principle is
assumed
Interfaces:
• Can only have constants
• Methods have no
•
•
•
•
implementation
Classes and abstract
classes implement
interfaces
Interfaces can extend
multiple interfaces
A class can implement
multiple interfaces
Substitution principle
not assumed
Make a class that doesn’t extend anything when your
class doesn’t pass the IS-A test for any other type
Extend a class only when you need to make a more
specific version of a class AND need to override or add
new behaviors
Use an abstract class to define a template for a group of
classes or when you want to guarantee nobody makes
objects of that type
Use an interface to define a role other classes can play
regardless of where the classes are in the inheritance
tree.
Abstract
classes can’t be instantiated
Abstract class can have concrete and abstract
methods
A class must be abstract if it has any abstract
methods
Abstract methods has no implementation and
the declaration ends with a semicolon
All abstract methods must be implemented in
the first concrete subclass in the inheritance
tree
Extending only one class avoids the diamond of
death
Interface is like a 100% abstract class
Create interfaces with interface instead of
class
Implement interfaces with implements keyword
Classes can implement multiple interfaces
Classes that implement interfaces must implement
all the methods of the interface
All interface methods are implicitly public and
abstract
Interfaces can apply to any class regardless of the
class heirarchy
Review
of concepts, syntax and terminology
Mid-term exam
• ~ 100 objective style questions
• T-F
• Multiple guess
• Fill in the blank
• Short answer, including code fragments
• Matching
Anything
covered in the reading assignments
or the lectures is fair game