Programming with Java - Lake

advertisement
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
Download