0% found this document useful (0 votes)
10 views23 pages

Lecture 05b - InnerClasses

The document discusses inner classes in object oriented programming. Inner classes are classes defined within other classes and have access to private members of the outer class. Inner classes can make outer classes more self-contained and be used as helper classes. Static inner classes have no connection to an object of the outer class.

Uploaded by

Ruben Veniche
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views23 pages

Lecture 05b - InnerClasses

The document discusses inner classes in object oriented programming. Inner classes are classes defined within other classes and have access to private members of the outer class. Inner classes can make outer classes more self-contained and be used as helper classes. Static inner classes have no connection to an object of the outer class.

Uploaded by

Ruben Veniche
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 23

Object Oriented

Programming
Inner Classes
Simple Uses of Inner Classes
 Inner classes are classes defined within
other classes
 The class that includes the inner class is
called the outer class
 There is no particular location where the
definition of the inner class (or classes) must
be place within the outer class
 Placing it first or last, however, will
guarantee that it is easy to find

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 2
Simple Uses of Inner Classes

 An inner class definition is a member of the


outer class in the same way that the instance
variables and methods of the outer class are
members
 An inner class is local to the outer class definition
 The name of an inner class may be reused for
something else outside the outer class definition
 If the inner class is private, then the inner class
cannot be accessed by name outside the definition
of the outer class
Copyright © 2008 Pearson Addison-Wesley.
Aug 7, 2007 All rights reserved 3
Inner/Outer Classes
public class Outer
{
private class Inner
{
// inner class instance variables
// inner class methods

} // end of inner class definition

// outer class instance variables


// outer class methods
}
Aug 7, 2007 4
Simple Uses of Inner Classes
 There are two main advantages to inner classes
 They can make the outer class more self-contained since
they are defined inside a class
 Both of their methods have access to each other's private
methods and instance variables
 Using an inner class as a helping class is one of the
most useful applications of inner classes
 If used as a helping class, an inner class should be marked
private

Aug 7, 2007 5
Inner and Outer Classes Have Access to Each Other's Private Members

 Within the definition of a method of an inner class:


 It is legal to reference a private instance variable of the outer
class
 It is legal to invoke a private method of the outer class
 Essentially, the inner class has a hidden reference to the outer
class
 Within the definition of a method of the outer class
 It is legal to reference a private instance variable of the inner
class on an object of the inner class
 It is legal to invoke a (nonstatic) method of the inner class as long
as an object of the inner class is used as a calling object

 Within the definition of the inner or outer classes, the modifiers


public and private are equivalent
6
Class with an Inner Class

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 7
Class with an Inner Class

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 8
Class with an Inner Class

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 9
Referring to a Method of the Outer Class
 If a method is invoked in an inner class
 If the inner class has no such method, then it is assumed to be an
invocation of the method of that name in the outer class
 If both the inner and outer class have a method with the same
name, then it is assumed to be an invocation of the method in the
inner class
 If both the inner and outer class have a method with the same
name, and the intent is to invoke the method in the outer class,
then the following invocation must be used:
OuterClassName.this.methodName()

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 10
Public Inner Classes
 If an inner class is marked public, then it can be
used outside of the outer class
 In the case of a nonstatic inner class, it must be
created using an object of the outer class
BankAccount account = new
BankAccount();
BankAccount.Money amount =
account.new Money("41.99");
 Note that the prefix account. must come before new
 The new object amount can now invoke methods from the
inner class, but only from the inner class

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 11
Public Inner Classes
 In the case of a static inner class, the
procedure is similar to, but simpler than, that
for nonstatic inner classes
OuterClass.InnerClass innerObject =
new
OuterClass.InnerClass();
 Note that all of the following are acceptable
innerObject.nonstaticMethod();
innerObject.staticMethod();
OuterClass.InnerClass.staticMethod()
;
Copyright © 2008 Pearson Addison-Wesley.
Aug 7, 2007 All rights reserved 12
Public Money Inner Class
If the Money inner class in the BankAccount example was defined as
public, we can create and use objects of type Money outside the
BankAccount class.
// this is okay in main( )
BankAccount account = new BankAccount( );
BankAccount.Money amt = // note syntax
account.new Money( “41.99” );
System.out.println( amt.getAmount( ) );
// but NOT this – why not??
System.out.println( amt.getBalance( ) );

Aug 7, 2007 13
Static Inner Classes
 A normal inner class has a connection between its objects
and the outer class object that created the inner class
object
 This allows an inner class definition to reference an instance
variable, or invoke a method of the outer class
 There are certain situations, however, when an inner class
must be static
 If an object of the inner class is created within a static method of
the outer class
 If the inner class must have static members

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved
14
Static Inner Classes
 Since a static inner class has no connection to an object of
the outer class, within an inner class method
 Instance variables of the outer class cannot be referenced
 Nonstatic methods of the outer class cannot be invoked
 To invoke a static method or to name a static variable of a
static inner class within the outer class, preface each with
the name of the inner class and a dot

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 15
Multiple Inner Classes
 A class can have as many inner classes as it
needs.
 Inner classes have access to each other’s
private members as long as an object of the
other inner class is used as the calling
object.

Aug 7, 2007 16
The .class File for an Inner
Class
 Compiling any class in Java produces a .class file
named ClassName.class
 Compiling a class with one (or more) inner classes causes
both (or more) classes to be compiled, and produces two
(or more) .class files
 Such as ClassName.class and
ClassName$InnerClassName.class

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 17
Nesting Inner Classes
 It is legal to nest inner classes within inner classes
 The rules are the same as before, but the names get longer
 Given class A, which has public inner class B, which has public
inner class C, then the following is valid:
A aObject = new A();
A.B bObject = aObject.new B();
A.B.C cObject = bObject.new C();

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 18
Inner Classes and Inheritance
 Given an OuterClass that has an InnerClass
 Any DerivedClass of OuterClass will automatically have
InnerClass as an inner class
 In this case, the DerivedClass cannot override the
InnerClass
 An outer class can be a derived class
 An inner class can be a derived class also

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 19
Anonymous Classes
 If an object is to be created, but there is no need to name the object's
class, then an anonymous class definition can be used
 The class definition is embedded inside the expression with the
new operator
 An anonymous class is an abbreviated notation for creating a
simple local object "in-line" within any expression, simply by
wrapping the desired code in a "new" expression.
 Anonymous classes are sometimes used when they are to be
assigned to a variable of another type
 The other type must be such that an object of the anonymous
class is also an object of the other type
 The other type is usually a Java interface
 Not every inner class should be anonymous, but very simple
"one-shot" local objects are such a common case that they merit
some syntactic sugar.

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 20
Anonymous Classes

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 21
Anonymous Classes

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 22
Anonymous Classes

Copyright © 2008 Pearson Addison-Wesley.


Aug 7, 2007 All rights reserved 23

You might also like