100 likes | 107 Views
This lab explores image and color effects using 2D arrays in Java. It covers topics such as inheritance, dynamic dispatch, abstract classes, and interfaces. Resources and examples are provided.
E N D
Lab 8 Due Thursday Image and color effects with 2D arrays Read: Chapter 9 Cahoon & Davidson Chapter 9 Regis & Stepp Additional Reading: http://java.sun.com/docs/books/tutorial/java/concepts/inheritance.html Last Time Review Inheritance Dynamic dispatch Today Dynamic dispatch Abstract Classes Announcements & Review Lecture 28: Abstract Classes & Inheritance
Inheritance in Java ... • All classes inherit from Object • Rectangle inherits from Object • ColoredRectangle inherits from • Rectangle Object provides these methods: toString() equals() // more on these clone() // later... instanceof() Object Transformation Graph Rectangle ColoredRectangle Lecture 28: Abstract Classes & Inheritance
Super class:Rectangle public class Rectangle { protected int width; // the instance variables protected int height; public Rectangle() { width = 0; height = 0; } public Rectangle(int w, int h) { width = w; height = h; } public void draw(...) {} Lecture 28: Abstract Classes & Inheritance
Syntax of InheritanceExample: ColoredRectangle public class ColoredRectangle extends Rectangle { private Color myColor; // additional instance variables public ColoredRectangle() { super(); // optional myColor = Color.white; } /* Is the same as: public ColoredRectangle() { implicitly first calls super, because the signatures match myColor = Color.white; } */ public ColoredRectangle(int w, int h, Color newColor) { super(w,h); // required: why do we need this one? myColor = newColor; } Lecture 28: Abstract Classes & Inheritance
Dynamic Dispatch • Declare variables of supertype and they can be the supertype or the subtype Rectangle r = new ColoredRectangle(); • Declare variables of a subtype and they can only be of type subtype or lower. • Test type with instanceof <variable instanceof TypeName> returns a boolean if (r instanceof Rectangle) {...} if (r instanceof ColoredRectangle) {...} • BlueJ Lecture 28: Abstract Classes & Inheritance
Abstract Classes • Want to partially declare a class • Force an implementation of a method but do not offer a default implementation it • require a draw method, but have not default draw Lecture 28: Abstract Classes & Inheritance
Syntax for Abstract Classes public abstract class Shapes { protected static String name; // e.g., Rectangle, Triangle, ... // Subclass must implement draw public abstract void draw(DrawingBox box); public String getName() { // Subclass need not implement getName return name; } } public class Rectangle extends Shapes { protected static String name = “Rectangle”; .... public void draw(DrawingBox box) { box.drawRect(...) } } Lecture 28: Abstract Classes & Inheritance
BlueJ examples ... Lecture 28: Abstract Classes & Inheritance
Interfaces • Want to partially specify a behavior that can apply to lots of classes • For example, adding Color • Enforces a consistant application of a “feature” across lots of classes Lecture 28: Abstract Classes & Inheritance
Interfaces Interface Colorable { public void setColor(Color c); public Color getColor(); } public class ColorRectangle extends Shapes implements Colorable{ Color myColor; public void setColor(Color c) { myColor = c; } public Color getColor() { return myColor; } Lecture 28: Abstract Classes & Inheritance