Download presentation
Presentation is loading. Please wait.
1
The Need for Flexibility Sometimes different classes are really very similar e.g. FramedRect and FramedOval can be moved can check whether a point is inside What if we want a variable that sometimes refers to a rectangle, and at other times an oval?
2
Interfaces Allow a programmer to exactly describe the features needed in a particular context Allow the use of parameters and variables that refer to values from more than one class
3
Movable An interface with two methods: public interface Movable { // Move receiver by dx in x direction and dy in y direction public void move( double dx, double dy ); // Return whether receiver contains point public boolean contains( Location point ); }
4
Interfaces as Contracts Movable geomObject; –Implies we can call: geomObject.move(5, 8); geomObject.contains(pressPoint); Any object referred to by geomObject must have the methods move & contains
5
Interfaces and the classes that implement them Interfaces –Provide method headers, not method bodies –May contain constants Classes implementing an interface –Must contain public methods for each method declared in the interface –Do not redefine constants in the interface –May implement multiple interfaces
6
Implementing Interfaces public class FunnyFace implements Movable { private static final int FACE_HEIGHT = 60, FACE_WIDTH = 60, EYE_OFFSET = 20, EYE_RADIUS = 8, MOUTH_HEIGHT = 10, MOUTH_WIDTH = FACE_WIDTH/2; private FramedOval head, leftEye, rightEye, mouth; public FunnyFace(double left, double top, DrawingCanvas canvas) { …} public void move( double dx, double dy ) { head.move( dx, dy ); leftEye.move( dx, dy ); rightEye.move( dx, dy ); mouth.move( dx, dy ); } public boolean contains( Location pt ) { return head.contains( pt ); }
7
Implementing Interfaces public class StraightFace implements Movable { private static final int FACE_HEIGHT = 60, FACE_WIDTH = 60, EYE_RADIUS = 8, EYE_OFFSET = 20, MOUTH_WIDTH = FACE_WIDTH/2; private FramedOval head; private Line leftEye, rightEye, nose, mouth; public StraightFace(double left, double top, DrawingCanvas canvas) { … } public void move( double dx, double dy ) { head.move( dx, dy ); leftEye.move( dx, dy ); rightEye.move( dx, dy ); mouth.move( dx, dy ); nose.move( dx, dy ); } public boolean contains( Location pt ) { return head.contains( pt ); }
8
Using Interfaces Movable face; face = new FunnyFace(…); OR face = new StraightFace(…); face.move( 12, 13 );
9
Caveat: Movable face; FunnyFace funny; face = funny; // legal funny = face; // illegal!
10
Constants in Interfaces Constants are not re-declared in a class implementing the interface public interface IntExample { public static final int DAYS_IN_YEAR = 365; public static final Location ORIGIN = new Location ( 0, 0 ); }
11
Using Constants public class Calendar implements IntExample { public static final int DAYS_IN_WEEK = 7; public static final int WEEKS_IN_YEAR = DAYS_IN_YEAR / DAYS_IN_WEEK; }
12
Multiple Interfaces What if we have two interfaces: Movable: public interface Movable { public void move( double dx, double dy ); public boolean contains( Location point ); } Colorable: public interface Colorable { public void changeColor( Color aColor ); public Color getColor(); }
13
Implementing Multiple Interfaces HappyFace must define all methods of its interfaces public class HappyFace implements Movable, Colorable { public void move(…) { } public void contains(…) { } public void changeColor(…) { } public Color getColor(…) { }
14
The objectdraw Library Uses interfaces extensively Examples: –DrawableInterface includes: move, moveTo, hide, show, contains… –Drawable2DInterface includes: methods of DrawableInterface, getWidth, getHeight –Resizable2DInterface includes: methods of Drawable2DInterface, setWidth, setHeight
15
Summary of Interfaces Can be used as types of variables & parameters Include definitions of public constants and headers of public methods Classes –can implement one or more interfaces –must provide public method definitions for every method specified in interfaces
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.