Set 5
Set 5
INHERITANCE
AND
INTERFACES
Copyright © 2013 by John Wiley & Sons. All rights reserved. Slides by Donald W. Smith Final Draft
TechNeTrain.com 10/29/2011
Comparing Interfaces and Inheritance
Here is a different interface: Named
public interface Named
{
String getName();
}
A class can implement more than one interface:
public class Country implements Measurable, Named
A class can only extend (inherit from) a single superclass.
An interface specifies the behavior that an implementing
class should supply - no implementation.
A superclass provides some implementation that a subclass
inherits.
Develop interfaces when you have code that processes
objects of different classes in a common way.
Casting from Interfaces to Classes
Method to return the object with the largest
measure:
public static Measurable larger(Measurable obj1,
Measurable obj)
{
if (obj1.getMeasure() > obj2.getMeasure())
{
return obj1;
}
else
{
return obj2;
}
}
Answer:
public static Comparable max(Comparable a,
Comparable b)
{
if (a.compareTo(b) > 0) { return a; }
else { return b; }
}
Inner Classes
Trivial class can be declared inside a method:
public class MeasurerTester
{
public static void main(String[] args)
{
class AreaMeasurer implements Measurer
{
. . .
}
. . .
Measurer areaMeas = new AreaMeasurer();
double averageArea = Data.average(rects,
areaMeas);
. . .
}
}
Inner Classes
You can declare inner class inside an enclosing
class, but outside its methods.
It is available to all methods of enclosing class:
public class MeasurerTester
{
class AreaMeasurer implements Measurer
{
. . .
}
public static void main(String[] args)
{
Measurer areaMeas = new AreaMeasurer();
double averageArea = Data.average(rects, areaMeas);
. . .
}
}
Inner Classes
Compiler turns an inner class into a regular
class file with a strange name:
MeasurerTester$1AreaMeasurer.class
Inner classes are commonly used for utility
classes that should not be visible elsewhere in
a program.
Implementing Interfaces
An interface can be implemented by multiple classes.
Each implementing class can provide their own unique versions of the
method definitions.
interface I1 {
void m1() ;
}
class C1 implements I1 {
public void m1() { System.out.println(“Implementation in C1”); }
}
class C2 implements I1 {
public void m1() { System.out.println(“Implementation in C2”); }
}
Interfaces
A class can implement multiple
interfaces
interface I2 extends I1 { … }
interface I1 { … }
class C1 implements I1 { … }
class C2 extends C1 { … }