Question of the Day
Write valid mathematical equation using:2 3 4 5one addition operator (‘+’)one equality operator (‘=’) Should have equal values on both sides of
equals sign Not limited to what is possible in Java
Question of the Day
Write valid mathematical equation using:2 3 4 5 one addition operator (‘+’)one equality operator (‘=’) Should have equal values on both sides of
equals sign Not limited to what is possible in Java
5 + 4 = 32
Inheritance Issues
Multiple inheritance causes many problems What if there are multiple superclasses
declare field? Which constructor will super() chain to? Since classes extend only 1 class, Java
avoids problem Often mix multiple ideas within class,
however
Inheritance Issues
Multiple inheritance causes many problems What if there are multiple superclasses declare
field? Which constructor will super() chain to? Since classes extend only 1 class, Java avoids
problem Often mix multiple ideas within class,
howeverpublic class Mammal { … }
public class Bird { … }
public class Platypus extends
Inheritance Issues
Multiple inheritance causes many problems What if there are multiple superclasses declare
field? Which constructor will super() chain to? Since classes extend only 1 class, Java avoids
problem Often mix multiple ideas within class,
howeverpublic class Mammal { … }
public class Bird { … }
public class Platypus extends
abstract
Can declare methods as abstract Methods cannot be defined; promise
functionality Methods can have parameters, return type,
etc. Bodies are illegal; declaration only lists
signaturepublic abstract void foo(int i);public abstract Beer bar(String o);
abstract class
If we have a class containing abstract methods Class considered abstract no matter how declared
abstract classes similar to regular classes… static & non-static fields allowed in class Class will always extend exactly 1 other class Mix of abstract & normal methods can be included May use default one or may define a constructor Can be extended by other classes
abstract class
If we have a class containing abstract methods Class considered abstract no matter how
declared abstract classes similar to regular
classes… …but cannot instantiate abstract class
And abstract methods inherited by subclasses
abstract class
If we have a class containing abstract methods Class considered abstract no matter how
declared abstract classes similar to regular
classes… …but cannot instantiate abstract class
And abstract methods inherited by subclasses But subclass can override method & make it
concrete
Interfaces
Can only declare important constant fields public static final must be used for
fields Interface declares public abstract
methods Methods callable anywhere by any class But method’s body cannot be defined in
interface
Adding to an Interface
Interfaces have sub-interfaces Sub-interface extends super-interface Super-interface’s methods inherited by sub-
interface Methods from super-super-interface also
inherited Sub-interface can extend multiple
interfaces Methods not defined so does not cause
problems
Declaring Interfaces
public interface Drawable { public void setColor(Color c); public Color getColor(); public void draw(Graphics g);}
public interface TranDraw extends Drawable{ public void setTransparency(int tLevel);}
public interface MoveDraw extends Drawable{ public void setPosition(int x, int y);
}
Interfaces
Classes implement interfaces Implementing classes define interface’s methods
Any number of interfaces may be implemented Multiple inheritance issues ignored -- methods
empty Unrelated to superclass chosen or used by a class
Classes must implement all interface’s methods Includes methods inherited from super-interface
Implementing Interfaces
public class Square implements Drawable {private Color c;private int x, y, side;
public Square(Color col, int len) { c = col; side = len;}
public void setColor(Color col){ c=col; }public Color getColor() { return c; }public void draw(Graphics g) { g.drawRect(x, y, side, side, c);}
}
Implementing Interfaces
public class Oval implements Drawable {private Color c;private int x, y, majRad, minRad;
public Oval(Color co, int maj, int min){ c = co; majRad = maj; minRad = min;}
public void setColor(Color col){ c=col; }public Color getColor() { return c; }public void draw(Graphics g) { g.drawOval(x, y, majRad, minRad, c);}
}
Using Interfaces
Cannot instantiate an interface… Not possible, since only create instances of
class Variables of interface type are perfectly
legal Variable can refer to implementing class
instance Methods must be implemented in actual
class Remember: which method called by
instance type
public void drawRed(Drawable d, Graphics g) {d.setColor(Color.red);d.draw(g);
}
Using Interfaces
Cannot instantiate an interface… Not possible, since only create instances of
class Variables of interface type are perfectly
legal Variable can refer to implementing class
instance Methods must be implemented in actual
class Remember: which method called by
instance type
public void drawRed(Drawable d, Graphics g) {d.setColor(Color.red);d.draw(g);
}
Using Interfaces
Cannot instantiate an interface… Not possible, since only create instances of
class Variables of interface type are perfectly
legal Variable can refer to implementing class
instance Methods must be implemented in actual
class Remember: which method called by
instance type
public void drawRed(Drawable d, Graphics g) {d.setColor(Color.red);d.draw(g);
}
Interface vs. Abstract Class
Both concepts serve similar purposes Cannot instantiate either of these types But can be used for variable, field, &
parameter types Used in other classes to identify important
features But very important differences define when
each used
Interface vs. Abstract Class
Can extend classes & implement interfaces Both used to mark instances have methods
defined Fields, params, & locals can use either as
their type Use abstract class when…
…classes should use common method or private field
…place in object hierarchy as subclass of existing class
Otherwise use interface for abstract methods More flexible: class can implement many
interfaces Can mark classes; do not have to declare
methods
Typecasting
int i = 13;Square s = ((Square)i);
Only exist to “assist” compiler with code Changes variable’s type so compilation
continues Not in *.class file – does not affect
instance at all Only when KNOW instance & variables
types differ Errors at runtime instead of during
compilation Illegal code will compile, but still illegal
Typecasting
int i = 13;Square s = ((Square)i);
Only exist to “assist” compiler with code Changes variable’s type so compilation
continues Not in *.class file – does not affect
instance at all Only when KNOW instance & variables
types differ Errors at runtime instead of during
compilation Illegal code will compile, but still illegal
Narrowing Conversions
Java cannot compile narrowing conversions Assigns superclass/interface to lower
variable Compiler will not allow it, but could be
legal Typecasting required for these assignments
Object obj = new String(“bye”);
Narrowing Conversions
Java cannot compile narrowing conversions Assigns superclass/interface to lower
variable Compiler will not allow it, but could be
legal Typecasting required for these assignments
Object obj = new String(“bye”);
String sad = obj; // Does not work
Narrowing Conversions
Java cannot compile narrowing conversions Assigns superclass/interface to lower
variable Compiler will not allow it, but could be
legal Typecasting required for these assignments
Object obj = new String(“bye”);
String sad = obj; // Does not work
String glad = (String)obj; // works!
For Next Lecture
Read GT2.5 for Mon. and be ready to discuss What is a generic type? Why are they going to save our wrists this
year? How can they be used correctly?
As usual, there is weekly assignment on Angel Due by 5PM Tuesday via Assignment
Submitter Each problem graded using provided JUnit
tests