interfaces and inner classes. what is an interface? what is “presented to the user”? the...

32
Interfaces and Interfaces and Inner Classes Inner Classes

Post on 22-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Interfaces and Inner Interfaces and Inner ClassesClasses

Page 2: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

What is an Interface?What is an Interface?

What is “presented to the user”?What is “presented to the user”? The public part of a class?The public part of a class? What is the substance of an interface?What is the substance of an interface?

Page 3: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Definition from Type TheoryDefinition from Type Theory

An interface is a “type”An interface is a “type” A type is a collection of method A type is a collection of method

specificationsspecifications A “contract”A “contract” The methods a user can expect to call uponThe methods a user can expect to call upon

That’s it!That’s it!

Page 4: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Separating Interface and Separating Interface and ImplementationImplementation

Why is it a Good Thing?Why is it a Good Thing? How is it done?How is it done? Example: Figures 1-5 in Jan00Example: Figures 1-5 in Jan00

Page 5: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Separation AnxietySeparation Anxiety

To fully separate interface from To fully separate interface from implementation, we separate the contract implementation, we separate the contract from the class(es) that implement(s) it!from the class(es) that implement(s) it!

Page 6: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Java InterfacesJava Interfaces

Similar to a class definitionSimilar to a class definition Used mainly for function prototypesUsed mainly for function prototypes

Abstract method declarationsAbstract method declarations Public and abstract by default!Public and abstract by default!

Can also include:Can also include: constants (static finals)constants (static finals) Nested classes and interfaces (covered later)Nested classes and interfaces (covered later)

Example: Next slide, Figure 6Example: Next slide, Figure 6

Page 7: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

interface Stack{    void push(Object o)        throws StackException;     Object pop()        throws StackException;     Object top()        throws StackException;     int size();}

Page 8: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

class FixedStack implements Stack{    // implementation unchanged // from Figure 1 …}

Page 9: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Advantage of InterfacesAdvantage of Interfaces(over inheritance)(over inheritance)

Any class that implements the interface Any class that implements the interface (i.e., provides the contract’s functionality) (i.e., provides the contract’s functionality) can be usedcan be used

Not constrained by subclassingNot constrained by subclassing

Page 10: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Implementation InheritanceImplementation Inheritance

What happens with What happens with extendsextends The subclass inherits implementation:The subclass inherits implementation:

Data and method bodiesData and method bodies You’re You’re stuckstuck with a particular implementation with a particular implementation

Page 11: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Interface InheritanceInterface Inheritance

A commitment to implement a contractA commitment to implement a contract No implementation is inheritedNo implementation is inherited Disadvantage:Disadvantage:

No code sharingNo code sharing Advantage:Advantage:

No code commitmentNo code commitment Freedom to implement any way you wantFreedom to implement any way you want

Page 12: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Interfaces vs. Abstract ClassesInterfaces vs. Abstract Classes

Use Abstract Classes when there is some Use Abstract Classes when there is some implementation to shareimplementation to share

In C++, an abstract class with only pure In C++, an abstract class with only pure virtual functions and no implementation virtual functions and no implementation behaves as an interfacebehaves as an interface

Page 13: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Multiple InheritanceMultiple Inheritance

What kind?What kind? Multiple inheritance of implementation is Multiple inheritance of implementation is

fraught with complexityfraught with complexity Virtual base classesVirtual base classes Dominance rulesDominance rules

Multiple inheritance of interfaces just Multiple inheritance of interfaces just means you must implement all the means you must implement all the methods in the hierarchymethods in the hierarchy And that’s all it meansAnd that’s all it means

Page 14: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

class DynamicStack implements Stack, Persistent{    // implementation as in Figure 4    // PLUS need to implement read and write}

Page 15: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Interfaces as CapabilitiesInterfaces as Capabilities

Implements multiple interfacesImplements multiple interfaces Interface names are often adjectivesInterface names are often adjectives

They describe capabilitiesThey describe capabilities Example: AbleTest.javaExample: AbleTest.java

Page 16: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Sub- and Super-InterfacesSub- and Super-Interfaces

An interface can extend another interfaceAn interface can extend another interface The net result is just the union of all the The net result is just the union of all the

method specificationsmethod specifications

interface PersistentStack extends Stack, Persistent{}class DynamicStack implements PersistentStack {…}

Page 17: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Interfaces in the Java LibraryInterfaces in the Java Library

ComparableComparable::public int compareTo(Object x)public int compareTo(Object x)

Like C’s strcmp, returns:Like C’s strcmp, returns: Negative, if this < xNegative, if this < x Zero if this.equals(x)Zero if this.equals(x) Positive, if this > xPositive, if this > x

You decide how the ordering worksYou decide how the ordering works Used throughout the libraryUsed throughout the library

Page 18: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Comparing FractionsComparing Fractions

( 0, 0)

a cb d

ad bc

b d

⇒> >

:

:

compareTo( ) should return ad - bc

Page 19: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Interfaces in the Java LibraryInterfaces in the Java Library

CloneableCloneable For copying objectsFor copying objects Kind of dorkyKind of dorky

SerializableSerializable For automatic object storage and retrievalFor automatic object storage and retrieval

CollectionCollection Basic contract for collectionsBasic contract for collections

Page 20: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

IteratorsIterators

A Design Pattern for traversing collectionsA Design Pattern for traversing collections java.util.Iterator interface:java.util.Iterator interface:public boolean hasNext( );public boolean hasNext( );public Object next( );public Object next( );public void remove( );public void remove( );

Collections typically implement IteratorCollections typically implement Iterator Benefit: Can have multiple iterators Benefit: Can have multiple iterators

simultaneouslysimultaneously Implemented as nested classesImplemented as nested classes

Page 21: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Iterator ExampleIterator Example

MySequence.javaMySequence.java An expandable array of ObjectAn expandable array of Object

MyIterator implements java.util.IteratorMyIterator implements java.util.Iterator MySequence.getIterator( ) returns a MySequence.getIterator( ) returns a

MyIterator objectMyIterator object

Page 22: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Issues with MySequence.javaIssues with MySequence.java

The class MyIterator has more visibility The class MyIterator has more visibility than it needsthan it needs Package access (we want private)Package access (we want private)

• Top-level classes can’t be private (or protected)Top-level classes can’t be private (or protected)

Clients only care about the Iterator Clients only care about the Iterator interface being implementedinterface being implemented They don’t care what type actually does itThey don’t care what type actually does it

Solution: nest MyIterator inside Solution: nest MyIterator inside MySequenceMySequence

Page 23: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Nested ClassesNested Classes

Can define classes and interfaces within Can define classes and interfaces within other classes and interfacesother classes and interfaces

Two flavors:Two flavors: Static (like nested classes in C++)Static (like nested classes in C++) Non-static (different!)Non-static (different!)

• Also called “inner classes”Also called “inner classes”

Can also define classes inside of a Can also define classes inside of a methodmethod ““local classes”local classes”

Page 24: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Static Nested ClassesStatic Nested Classes

Just like C++Just like C++ Just a scoping mechanismJust a scoping mechanism class A {class A {

static class B {…}static class B {…}}}A.B b = new A.B();A.B b = new A.B();

Page 25: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Inner ClassesInner Classes

Objects of inner classes only exist in Objects of inner classes only exist in connection with an instance of their connection with an instance of their containing class(es)containing class(es)

They have an invisible link to the object of They have an invisible link to the object of the containing classthe containing class

They can be declared with any access They can be declared with any access specifierspecifier Usually privateUsually private

Used a lot in AWT/SwingUsed a lot in AWT/Swing

Page 26: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Special SyntaxSpecial Syntax

Refer to variable in outer class:Refer to variable in outer class:Outer.this.varNameOuter.this.varName

Make an object of inner class:Make an object of inner class:Outer outer = new Outer();Outer outer = new Outer();Outer.Inner innerOuter.Inner inner = outer.new Inner();= outer.new Inner();

See page 230 of See page 230 of Core JavaCore Java

Page 27: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

MySequence2.javaMySequence2.java

MyIterator is an inner classMyIterator is an inner class A MyIterator object has an implicit A MyIterator object has an implicit

MySequence object that “owns” itMySequence object that “owns” it Just like “this” is implicit in non-static methodsJust like “this” is implicit in non-static methods Any references to MySequence fields is Any references to MySequence fields is

resolved automaticallyresolved automatically ““data” == “MySequence.this.data”data” == “MySequence.this.data”

Page 28: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Local Inner ClassesLocal Inner Classes

Defined inside a methodDefined inside a method Not visible outside the methodNot visible outside the method

Can only access final locals in the Can only access final locals in the enclosing method enclosing method See p. 233 in See p. 233 in Core JavaCore Java

Example: MySequence3.javaExample: MySequence3.java

Page 29: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Anonymous Inner ClassesAnonymous Inner Classes

The name MyIterator is only used in one The name MyIterator is only used in one placeplace Hardly seems worth a separate name!Hardly seems worth a separate name!

Can define an unnamed class “on-the-fly” Can define an unnamed class “on-the-fly” instead in the return expression in instead in the return expression in MySequence.getIterator( )MySequence.getIterator( )

Can have no named constructorsCan have no named constructors Example: MySequence4.javaExample: MySequence4.java

Page 30: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Marker InterfacesMarker Interfaces

Interfaces with no definitions!Interfaces with no definitions! Merely to “color” or “tag” a classMerely to “color” or “tag” a class CloneableCloneable SerializableSerializable

Will cover in I/O sectionWill cover in I/O section

Page 31: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

CloningCloning Meant to replace copy constructorsMeant to replace copy constructors

For “deep copies”For “deep copies” Somewhat problematic, but widely used!Somewhat problematic, but widely used!

Must Implement CloneableMust Implement Cloneable Must override Object.clone( )Must override Object.clone( )

But make it public! (It’s protected in Object)But make it public! (It’s protected in Object) Call super.clone() first! (To get the right type)Call super.clone() first! (To get the right type)

It is an error to call clone( ) for a class that does It is an error to call clone( ) for a class that does not implement Cloneablenot implement Cloneable Throws CloneNotSupportedExceptionThrows CloneNotSupportedException

Example: Figures 7-9Example: Figures 7-9

Page 32: Interfaces and Inner Classes. What is an Interface?  What is “presented to the user”?  The public part of a class?  What is the substance of an interface?

Cloning PolicyCloning Policy

1) Support it1) Support it As just describedAs just described

2) Let subclasses support it2) Let subclasses support it Don’t implement CloneableDon’t implement Cloneable But provide a protected clone if Object.clone() But provide a protected clone if Object.clone()

isn’t deep enoughisn’t deep enough 3) Forbid cloning3) Forbid cloning

Provide a clone( ) that unconditionally throws Provide a clone( ) that unconditionally throws CloneNotSupportedExceptionCloneNotSupportedException