0% found this document useful (0 votes)
107 views16 pages

Inner Classes: Neelam A

Inner Class in Java
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
107 views16 pages

Inner Classes: Neelam A

Inner Class in Java
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 16

Inner Classes

Neelam A

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Overview
• Kinds of classes
• Inner
• Nested

• Inner classes

• Anonymous inner classes

• Nested classes

• Local Class

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Kind of Classes
• Top level classes
• Declared inside package
• Visible throughout package, perhaps further
• Normally declared in their own file
 Public classes must be defined in their own file
 Not required for other classes

• Inner and nested classes


• Declared inside class (or method)
• Visible normally only to outer class
 Can have wider visibility

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Kind of Inner/Nested Classes
• Inner class
• Anonymous inner class
• Nested class

• Examples
public class MyOuterClass {
public class MyInnerClass { … }
static public class MyNestedClass { … }
Iterator iterator( ) { return new Iterator( ) { … } }
}

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Classes
• Description
• Class defined in scope of another class

• Property
• Can directly access all variables & methods of
enclosing class (including private fields & methods)

• Example
public class OuterClass {
public class InnerClass {
...
}
}
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Class
• May be named or anonymous.

• Useful for
• Logical grouping of functionality
• Data hiding
• Linkage to outer class
• More readable/maintainable code

• Examples
• Iterator for Java Collections
• Listeners for Java GUI Applications

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Classes
• Inner class instance

• Has association to an instance of outer class


• Must be instantiated with an enclosing instance
• Is tied to outer class object at moment of creation (can not be
changed)

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Classes Example
• Code
public class OC { // outer class
private int x = 2; // don’t forget private
public class IC { // inner class
int z = 4;
public int getSum() {
return x + z;
}
}
}

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Class Example
• Class referencing syntax
• OuterClass.InnerClass

• Example

OC oc = new OC();
OC.IC ic; // name of inner class
// ic = new OC.IC() doesn’t work!
ic = oc.new IC(); // instantiates inner class
// ic now will "know about" oc, but not vice versa
ic.getSum() yields 6 // can access private x in oc!

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Creating/Referring to Inner Classes
• Assume class A defines an inner class B.

• Inside instance methods of A, just use B as the type of


references to the inner class and use new B(…) to create
instances
• Newly created B object associated with A object
referenced by this

• Outside of A, use A.B to name the inner class.

• If you need to create an instance of B associated with a


specific A object a, outside of an instance method on a
• Use a.new B()
• It is very rare for you to need to do this
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Accessing Outer Scope
Code
public class OC { // outer class
int x = 2;
public class IC { // inner class
int x = 6;
public void getX() { // inner class method
int x = 8;
System.out.println( x ); // prints 8
System.out.println( this.x ); // prints 6
System.out.println( OC.this.x ); // prints 2
}
}
}
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Nested Class
• Declared like a standard inner class, except you say “static
class” rather than “class”.

• For example,
class LinkedList {
static class Node {
Object head;
Node tail;
}
Node head;
}

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Nested Classes
• A static nested class is behaviorally a top-level class that has
been nested in another top-level class for packaging
convenience.

• An instance of a nested class does not contain an implicit


reference to an instance of the outer class.

• Still defined within outer class, has access to all the private fields

• Use if inner object might be associated with different outer


objects, or survive longer than the outer object
• Or just don’t want the overhead of the extra pointer
in each instance of the inner object

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Anonymous Inner Class
• Doesn’t name the class.

• Inner class defined at the place where you create an


instance of it (in the middle of a method).
• Useful if the only thing you want to do with an inner
class is create instances of it in one location

• In addition to referring to fields/methods of the outer


class, can refer to final local variables.

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Anonymous Inner Class
Syntax:

new ReturnType() { // unnamed inner class


body of class… // implementing ReturnType
};

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Local Inner Class
We can declare an inner class within the body of a method.
Such a class is known as a local inner class.

www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.

You might also like